Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是日食';垃圾收集器与默认的不同?_Java_Eclipse_Garbage Collection - Fatal编程技术网

Java 是日食';垃圾收集器与默认的不同?

Java 是日食';垃圾收集器与默认的不同?,java,eclipse,garbage-collection,Java,Eclipse,Garbage Collection,从这里发布的问题和我的一个老问题中,我产生了一种印象,即您不能在任何时候都显式地运行Java垃圾收集器 如果您调用它,您只需指示系统在任何可能或认为合适的时候调用它 但是在eclipse中,如果您按下“运行垃圾收集器”按钮,您会看到内存使用量立即减少。这怎么可能?eclipse使用的是不同的垃圾收集器吗?它是否可以访问一些我们不知道的秘密API?或者是我对GC工作原理的理解有误吗?您不能告诉GC运行,但是,使用System.GC() 我怀疑Eclipse只是调用了它,而且大多数时候,GC决定做一

从这里发布的问题和我的一个老问题中,我产生了一种印象,即您不能在任何时候都显式地运行Java垃圾收集器

如果您调用它,您只需指示系统在任何可能或认为合适的时候调用它

但是在eclipse中,如果您按下“运行垃圾收集器”按钮,您会看到内存使用量立即减少。这怎么可能?eclipse使用的是不同的垃圾收集器吗?它是否可以访问一些我们不知道的秘密API?或者是我对GC工作原理的理解有误吗?

您不能告诉GC运行,但是,使用
System.GC()

我怀疑Eclipse只是调用了它,而且大多数时候,GC决定做一些事情。

一个“普通”Java程序无法强制垃圾收集器运行。但是,使用(JVMTI,一种用于将调试器连接到JVM的API)可以强制进行垃圾收集

我不知道Eclipse是否只是调用
System.gc()
(它不强制垃圾收集),或者它是否使用JVMTIAPI真正强制gc运行


使用(Sun JDK 6附带的),您可以连接到其他正在运行的Java进程,并按下按钮在这些进程中运行垃圾收集器。

Eclipse调用
System.gc()
System.gc()
不强制垃圾收集,它只是指示JVM尝试一下。JVM可以随意忽略它。然而,实际上,Sun JVM的默认行为是在调用
System.GC()
时运行GC

请注意以下事项:

  • Sun的JVM可以使用
    -XX:-DisableExplicitGC
    命令行标志启动。有了这个标志,
    System.gc()
    就变成了一个no操作。在适当的时候,VM仍将操作GC,但它将忽略对
    System.GC()
    的任何显式调用

  • 无论您如何执行,强制GC运行都不是一个好主意。GC根据运行的应用程序代码的一些启发式近似值进行优化(其中大多数处理复杂但关键的缓存位置问题),并且对GC的显式调用不是这些启发式的一部分。强制GC运行通常被证明是一种复杂的减慢速度的方法

  • 也许我应该称之为Oracle的JVM?Oracle收购了Sun,所有Java页面现在到处都有Oracle徽标


如果你想要真正的瘦:我不认为这个问题能回答任何问题。。。它没有解释为什么在eclipse中按钮总是立即起作用此处有一些信息: