我今天注意到我的程序慢慢咀嚼记忆。我查看了 Java VisualIVM 以尝试了解更多信息。我很陌生。我正在使用Swing编写Java8来处理游戏。
请注意,除了渲染对象外,不会发生任何事情。
没有新的实例或任何内容。
Game Loop正在寻找
的内容while (running)
try render all drawables at optimal fps
try update all entities at optimal rate
sleep if there is time over
从20分钟后我发现的情况发生了以下情况。
如果我对游戏循环中的所有内容进行评论,除了while (running {}
部分我得到的泄漏更少,但它们仍会发生。
这是正常还是我应该深入挖掘?如果我需要深入挖掘,有人会指出我要照顾的方向。
现在25分钟后,最高达102 MB的ram。这意味着泄漏越来越少。
提醒一下,我对此并不擅长。我第一次尝试以这种方式调试我的项目。请记住这一点。更新
大约40分钟后,它将达到101到102 MB的RAM使用率。它现在已经超过了15分钟。它有点上下。
堆大小越来越小。 CPU使用率稳定。
答案 0 :(得分:1)
简答:没有泄密。
<强> Expalanation 强>
使用这些问题作为参考。
Simple Class - Is it a Memory Leak?
Tracking down a memory leak / garbage-collection issue in Java
Creating a memory leak with Java
和这篇文章。
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
正如我在问题中提到的那样。我对此很新。触发我的是我检查了Windows任务管理器,看到我的应用程序的内存使用量增加了。所以我决定深入挖掘。我学到了很多东西。
Javas Garbage Collection被我大大低估了。如果这是你的意图,导致内存泄漏是很麻烦的。但是,当涉及到线程时,它可能会出现问题。当我在项目中使用线程时,引起了我的注意。
Windows提供的工具低于标准,我建议使用外部工具。我用了Java VisuaIVM
。在这个工具中,我发现在游戏的前2分钟有大量的类被加载。并且有点介入。创建的第一个是JVM创建的String
引用。
&#34; Thread.sleep可以分配封面下的对象。&#34; - 我发现它确实如此。共计5个。这解释了我的初始&#34; 5课程在运行时加载了一段时间。&#34;。他们做了什么我还没有任何线索。
大约10 - 15 MB来自我所做的分析。我希望我不是这样的新秀。
所以我再也找不到任何泄密。