为什么此代码不会导致我的计算机内存不足 运行?
Why is this code not causing my computer's memory to run out?
在玩东西的时候,我遇到了这样的事情。这段代码不会导致我的记忆 运行。
while(true)
{
Person p=new Person();
}
除非垃圾收集每隔几秒 运行ning 一次,否则我不知道为什么我的内存使用量(在任务管理器中)没有上升。
那么 java 运行 中的垃圾收集是否经常进行?还是 windows 中的任务管理器没有很好地显示内存使用情况?
更新:
我用 Java Visual VM 监视它。在我 运行 的几分钟内,垃圾收集器从未被激活。
GC 知道什么时候 运行,它 运行 需要这样做的时候,Person
的作用域(生命周期)太短,GC 会清扫它在伊甸园 space 中,甚至不会被提升到老一代。
Java 中的垃圾收集基本上会 运行 根据需要经常进行。每当堆被填满时,GC 就会发生。如果你不分配,GC 就不会 运行,如果你除了分配什么都不做,GC 会 运行 很频繁。更重要的是,如果不首先尝试 运行 GC,Java 将永远不会出现 OutOfMemoryError。
在某些情况下,JIT 还可以识别对象何时明显超出范围或仅在本地需要,并且可以在这种情况下进行堆栈分配,根本不需要任何 GC。
在每个循环中创建对象并销毁它。垃圾仅在必要时释放内存。如果你只想制造一个内存错误,你必须立即创建一个 ArrayList,然后将 person 添加到 ArrayList。
在玩东西的时候,我遇到了这样的事情。这段代码不会导致我的记忆 运行。
while(true)
{
Person p=new Person();
}
除非垃圾收集每隔几秒 运行ning 一次,否则我不知道为什么我的内存使用量(在任务管理器中)没有上升。
那么 java 运行 中的垃圾收集是否经常进行?还是 windows 中的任务管理器没有很好地显示内存使用情况?
更新: 我用 Java Visual VM 监视它。在我 运行 的几分钟内,垃圾收集器从未被激活。
GC 知道什么时候 运行,它 运行 需要这样做的时候,Person
的作用域(生命周期)太短,GC 会清扫它在伊甸园 space 中,甚至不会被提升到老一代。
Java 中的垃圾收集基本上会 运行 根据需要经常进行。每当堆被填满时,GC 就会发生。如果你不分配,GC 就不会 运行,如果你除了分配什么都不做,GC 会 运行 很频繁。更重要的是,如果不首先尝试 运行 GC,Java 将永远不会出现 OutOfMemoryError。
在某些情况下,JIT 还可以识别对象何时明显超出范围或仅在本地需要,并且可以在这种情况下进行堆栈分配,根本不需要任何 GC。
在每个循环中创建对象并销毁它。垃圾仅在必要时释放内存。如果你只想制造一个内存错误,你必须立即创建一个 ArrayList,然后将 person 添加到 ArrayList。