在空闲内存接近零之前,是否有任何关闭GC执行的黑客攻击?

时间:2012-03-24 04:55:30

标签: java optimization garbage-collection

好奇。如果你有4Gb的可用内存,你每分钟就会产生10k的垃圾。 GC会每分钟触发一次吗?在我的情况下,最好延迟GC或根本不执行它。有关最好的GC的想法和想法,以实现这样的事情吗?

3 个答案:

答案 0 :(得分:2)

不,默认垃圾收集器(串行GC)在内存已满(Eden空间或旧代空间)之前不会运行。

如果你想在你的情况下尽量减少垃圾收集器的运行时间,试着最大化Eden空间:

java -Xms2g -Xmx3g -XX:NewSize=500m -XX:MaxNewSize=1024m yourApplication

以上设置,将以3g最大内存运行您的应用程序,并且Eden空间最大为1g,因此任何新分配的对象都将存储在此空间中,并且(默认)垃圾收集器将不会运行,直到此空间充满了物体。

答案 1 :(得分:1)

  

在空闲内存接近零之前,是否有任何关闭GC执行的黑客攻击?

不,没有。您没有从应用程序中获得该级别的控制。另一方面......

  

如果你有4Gb的可用内存,你每分钟就会产生10k的垃圾。 GC会每分钟触发一次吗?

不,不会。当JVM认为这是最佳时机时,GC就会运行。 “最佳时间”取决于GC尝试优化的内容;例如吞吐量,或最小化暂停:

  • 在前一种情况下,当Eden空间(创建新对象的地方)没有空间用于您想要创建的对象时。

  • 在后一种情况下,当(通常)Eden空间中的空闲内存量下降到(可配置的)阈值水平以下时。

但一般来说,您无需担心JVM不必要地运行垃圾收集器。它不会。

答案 2 :(得分:-1)

使用-verbose:gc选项运行您的应用程序,您可以看到转储到屏幕上的所有垃圾收集的日志,这将使您可以很好地了解虚拟机中发生的情况。

您还可以使用Visual VM监控行为。