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

Java 在空闲内存接近零之前,是否存在关闭GC执行的任何黑客行为?,java,optimization,garbage-collection,Java,Optimization,Garbage Collection,只是好奇。如果您有4Gb的可用内存,并且每分钟创建10k的垃圾。GC会每分钟触发一次吗?在我的情况下,最好延迟GC或根本不执行它。关于如何使用最好的GC来完成这样的任务,您有什么想法吗?没有,默认的垃圾收集器(串行GC)将在内存(Eden空间或旧代空间)已满之前不会运行 如果您想在您的情况下最小化垃圾收集器的运行时间,请尝试最大化Eden空间: java -Xms2g -Xmx3g -XX:NewSize=500m -XX:MaxNewSize=1024m yourApplication 上述

只是好奇。如果您有4Gb的可用内存,并且每分钟创建10k的垃圾。GC会每分钟触发一次吗?在我的情况下,最好延迟GC或根本不执行它。关于如何使用最好的GC来完成这样的任务,您有什么想法吗?

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

如果您想在您的情况下最小化垃圾收集器的运行时间,请尝试最大化Eden空间:

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

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

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

您还可以使用VisualVM监视行为

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

不,没有。您在应用程序中没有那种级别的控制。另一方面

如果您有4Gb的可用内存,并且每分钟创建10k的垃圾。GC会每分钟触发一次吗

不会的。当JVM认为现在是执行此操作的最佳时间时,GC将运行。“最佳时间”取决于GC试图优化什么;e、 g.为了提高吞吐量,或尽量减少暂停:

  • 在前一种情况下,当伊甸园空间(创建新对象的地方)没有空间容纳您要创建的对象时

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


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

试着让伊甸园的空间变得非常大?