Java JVM 默认垃圾收集器:它在不同的应用程序中配置相同吗?
Java JVM Default Garbage Collector: is it configured the same across different applications?
如题所示
我 运行 进行了测试,并使用 JMX 记录了一段时间内的内存堆使用模式。然后我稍后重新 运行 我的 jar 文件并再次研究它的内存行为。结果是一个略有不同的记忆模式。在这两种情况下,我都没有预先配置我的垃圾收集器。所以我现在想知道两个默认的垃圾收集器是否在同一台机器上具有相同的配置。
如果不是,我如何在不指定很多参数的情况下确保我的垃圾收集器是相同的?如果不是 GC 配置,还有什么会影响我的结果?
如果您运行在同一台机器上使用相同的 JVM,堆和 GC 参数将相同。
人机工程学是早在 JDK 5.0 中引入的一项功能,旨在尝试消除 GC 调优中的一些猜测。服务器-class 机器(2 个或更多内核和 2 Gb 或更多内存)将使用 1/4 的物理内存(最多 1Gb)用于初始和最大堆大小(参见 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html ).所以不同机器默认配置可能不同
要准确了解您设置了哪些标志,请使用:
java -XX:+PrintFlagsFinal -version
内存使用模式的不同只是应用程序的非确定性行为。即使使用完全相同的一组输入,我怀疑您是否会看到完全相同的内存行为,只是许多其他 OS 和硬件效果(缓存、核心亲和力等)
如题所示
我 运行 进行了测试,并使用 JMX 记录了一段时间内的内存堆使用模式。然后我稍后重新 运行 我的 jar 文件并再次研究它的内存行为。结果是一个略有不同的记忆模式。在这两种情况下,我都没有预先配置我的垃圾收集器。所以我现在想知道两个默认的垃圾收集器是否在同一台机器上具有相同的配置。
如果不是,我如何在不指定很多参数的情况下确保我的垃圾收集器是相同的?如果不是 GC 配置,还有什么会影响我的结果?
如果您运行在同一台机器上使用相同的 JVM,堆和 GC 参数将相同。
人机工程学是早在 JDK 5.0 中引入的一项功能,旨在尝试消除 GC 调优中的一些猜测。服务器-class 机器(2 个或更多内核和 2 Gb 或更多内存)将使用 1/4 的物理内存(最多 1Gb)用于初始和最大堆大小(参见 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html ).所以不同机器默认配置可能不同
要准确了解您设置了哪些标志,请使用:
java -XX:+PrintFlagsFinal -version
内存使用模式的不同只是应用程序的非确定性行为。即使使用完全相同的一组输入,我怀疑您是否会看到完全相同的内存行为,只是许多其他 OS 和硬件效果(缓存、核心亲和力等)