为什么这段代码不会导致我的计算机内存耗尽?

时间:2015-12-31 20:44:21

标签: java windows-7 garbage-collection

在玩某些东西时,我遇到了类似的东西。这段代码不会导致我的记忆耗尽。

while(true)
{
    Person p=new Person();       
}

除非垃圾收集每隔几秒钟运行一次,否则我无法分清为什么我的内存使用量(在任务管理器中)没有上升。

java中的垃圾收集经常运行吗?或者Windows中的任务管理器是否在显示内存使用情况方面做得不好?

更新: 我用Java Visual VM监视它。垃圾收集器在我运行它的几分钟内从未激活过。

3 个答案:

答案 0 :(得分:6)

GC知道何时运行,它在需要时运行,Person的范围(生命周期)太短,GC将在伊甸园空间中扫描它,它不会甚至被提升为老一辈。

答案 1 :(得分:1)

Java中的垃圾收集基本上会根据需要运行。每当堆被填满时,GC就会发生。如果你没有分配,GC将无法运行,如果你什么也不做,除了分配,GC将经常运行。更重要的是,如果不首先尝试运行GC,Java将永远不会出现OutOfMemoryError。

在某些情况下,JIT还可以识别对象何时明显超出范围或仅在本地需要,并且在这种情况下可以进行堆栈分配,而根本不需要任何GC。

答案 2 :(得分:0)

在每个循环中创建对象并销毁它。垃圾只在必要时释放内存。如果你只想做一个内存错误,你必须在while和while添加人员的同时创建一个ArrayList。