我只是想知道,内存使用变化如此之快是正常的。
我运行这个code 这是教程'如何制作一个简单的游戏。'
我在游戏的主循环中添加了一些代码:
g.setColor(Color.cyan);
g.drawString(System.currentTimeMillis() + "\n\n/nRAM:[" + (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024 + " MB]", 100, 100);
RAM使用率在25-30之间变化非常快,依此类推,
我的问题是它为什么会发生?这是错误的行为还是无关紧要?代码写错了吗?
编辑: 我怀疑是因为例如在这个video 内存使用是稳定的,而且brackeen游戏具有相同的使用(25mb),直到声音停止播放。
答案 0 :(得分:3)
在Java中,内存管理由垃圾收集器自动处理。因此,一旦不再需要一个对象(没有任何引用),它就不会立即被释放,而是留在内存中。时不时(取决于几个因素,如JVM设置,最大堆大小等),垃圾收集启动并删除不需要的对象。由于每帧都不会发生这种情况,因此您会看到内存使用率攀升,然后在垃圾收集发生时突然停止。
答案 1 :(得分:1)
如果你创造了大量垃圾,你可以看到它每秒产生500 MB或更多。
如果使用内存分析器,则可以减少内存消耗,对于正在运行的程序,内存分析可能会降至每分钟不到1 MB。