只需按标题中指定。

我运行了一个测试,并使用JMX记录了其随时间推移的内存堆使用模式。然后,我稍后重新运行了jar文件,并再次研究了其内存行为。结果是稍微不同的内存模式。在这两种情况下,我都没有预先配置垃圾收集器。因此,我现在想知道两个默认垃圾收集器是否在同一台计算机上具有相同的配置。

如果不是,如何在不指定许多参数的情况下确保我的垃圾收集器相同?如果没有GC配置,还会对我的结果有什么贡献?

最佳答案

如果在同一台计算机上使用相同的JVM运行相同的应用程序,则堆和GC参数将相同。

人体工程学是JDK 5.0中引入的一项功能,旨在消除GC调整中的一些猜测。服务器级机器(2个或更多内核以及2或更多Gb的内存)将使用1/4的物理内存(最大1Gb)用于初始和最大堆大小(请参见https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html)。因此,默认情况下,不同的计算机可能具有不同的配置。

要找出确切设置的标志,请使用:
java -XX:+PrintFlagsFinal -version

内存使用模式的不同只是应用程序的不确定行为。即使使用完全相同的输入集,我也怀疑您会看到完全相同的内存行为,只是受其他许多OS和硬件影响(缓存,核心相似性等)影响。

关于java - Java JVM默认垃圾收集器:在不同的应用程序中是否配置相同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54884503/

10-09 05:08