触发Java垃圾回收的简单程序

触发Java垃圾回收的简单程序,java,garbage-collection,Java,Garbage Collection,我正在测试一些JDK,需要多次触发垃圾收集。如何在一个简单的程序中轻松实现这一点?举个例子会非常有帮助。谢谢。您可以使用System.gc()请求垃圾收集 这在您的问题上下文中可能很有趣,您可以使用System.gc()请求垃圾收集 在使用System.gc() 运行垃圾收集器。调用gc方法表明 Java虚拟机致力于在虚拟机中回收未使用的对象 以使其当前占用的内存可用于快速存储 重新使用当控件从方法调用返回时,Java虚拟 这台机器已经尽了最大的努力从所有被丢弃的机器中回收空间 对象 call

我正在测试一些JDK,需要多次触发垃圾收集。如何在一个简单的程序中轻松实现这一点?举个例子会非常有帮助。谢谢。

您可以使用
System.gc()
请求垃圾收集


这在您的问题上下文中可能很有趣,您可以使用
System.gc()
请求垃圾收集

在使用
System.gc()

运行垃圾收集器。调用gc方法表明 Java虚拟机致力于在虚拟机中回收未使用的对象 以使其当前占用的内存可用于快速存储 重新使用当控件从方法调用返回时,Java虚拟 这台机器已经尽了最大的努力从所有被丢弃的机器中回收空间 对象

call System.gc()实际上等同于调用:

Runtime.getRuntime().gc()

从use
System.gc()

运行垃圾收集器。调用gc方法表明 Java虚拟机致力于在虚拟机中回收未使用的对象 以使其当前占用的内存可用于快速存储 重新使用当控件从方法调用返回时,Java虚拟 这台机器已经尽了最大的努力从所有被丢弃的机器中回收空间 对象

call System.gc()实际上等同于调用:

Runtime.getRuntime().gc()

有关垃圾收集的详细讨论,请参阅。您可以请求运行它(如前面的回答所述),但这并不是保证,因此您不应该对调用承担太多。最好的选择是多次创建和销毁新对象。要让它们被销毁,请在块中创建它们并再次关闭。也许是这样的:

for(int i = 0; i < MAX; ++i) {
    {
        Integer i = new Integer(0);
    }
}
for(int i=0;i
您可以从外部监视内存使用情况?

有关垃圾收集的详细讨论,请参阅。您可以请求运行它(如前面的回答所述),但这并不是保证,因此您不应该对调用承担太多。最好的选择是多次创建和销毁新对象。要让它们被销毁,请在块中创建它们并再次关闭。也许是这样的:

for(int i = 0; i < MAX; ++i) {
    {
        Integer i = new Integer(0);
    }
}
for(int i=0;i


您可以从外部监视内存使用情况?

System.gc()
应该有帮助,但不能保证。
System.gc()
应该有帮助,但不能保证。我不想请求gc,我只想让它自动运行Java垃圾收集器。您可以简单地请求触发它,我不想请求GC,我只想让它自动运行Java垃圾收集器自动运行。你可以简单地请求触发它。我不想请求GC,我只想让它自己运行。你说的自己运行是什么意思?我不想请求GC,我只想让它自己运行。你说的自己运行是什么意思?+1是唯一能保证最终导致GC的解决方案。但是考虑创建<代码>字节[1024 ] < /代码>或更大,以避免过多的CPU使用。另外,
new Integer()
从来都不是一个好主意,但是
Integer.valueOf(0)
将始终返回同一个对象…逃避分析的抖动可能会在堆栈上分配这些对象并立即将其清除,这意味着GC可能永远不会被触发。这些都是优点,谢谢。在我脑子里,我只是想用一个对象作为例子。也许把这个对象传递给一个成本非常低的方法是个好主意?我不太熟悉逃逸分析是如何进行的。也许改变其中一个字节并返回的内容足以跳过该操作?Escape分析会检查对象是否在任何地方被分配或使用,从而要求更长的生命周期。在这种情况下,将引用分配给成员变量就足够了;我认为这足以击败逃逸分析,因为现在对象必须能够生存超过当前堆栈帧的生存期。+1是保证最终导致GC的唯一解决方案。但是考虑创建<代码>字节[1024 ] < /代码>或更大,以避免过多的CPU使用。另外,
new Integer()
从来都不是一个好主意,但是
Integer.valueOf(0)
将始终返回同一个对象…逃避分析的抖动可能会在堆栈上分配这些对象并立即将其清除,这意味着GC可能永远不会被触发。这些都是优点,谢谢。在我脑子里,我只是想用一个对象作为例子。也许把这个对象传递给一个成本非常低的方法是个好主意?我不太熟悉逃逸分析是如何进行的。也许改变其中一个字节并返回的内容足以跳过该操作?Escape分析会检查对象是否在任何地方被分配或使用,从而要求更长的生命周期。在这种情况下,将引用分配给成员变量就足够了;我认为这足以击败逃逸分析,因为现在对象必须能够生存超过当前堆栈帧的生存期。