java - 为什么 JVM 程序在较小的堆大小设置下运行得更快?

标签 java jvm

我正在对 JVM 应用程序进行基准测试,该应用程序对磁盘 IO 和 CPU 施加了非常重的负载。

通常我使用 4G 最大/最小堆大小对其进行基准测试,整个基准测试平均需要 73 秒才能运行。

今天我很好奇,只给了它 1G 最大/最小堆大小,令人惊讶的是整个基准测试平均只需要 62 秒即可运行。

所以我想知道为什么 JVM 在较小的堆大小下性能更好?

补充说明:

环境:

java version "1.7.0_19"
OpenJDK Runtime Environment (fedora-2.3.9.1.fc17-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

Linux ____ 3.8.4-102.fc17.x86_64 #1 SMP Sun Mar 24 13:09:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

注释来自 Oracle JVM 上的文档

Next, you might try decreasing the amount of heap used. A larger heap will cause garbage collection pauses to increase because there is more heap to scan.

它也是您使用的 GC 算法的功能。例如,增量 GC 可能给出完全不同的数字。 (尝试 -Xincgc 并查看您的数字)

link

关于java - 为什么 JVM 程序在较小的堆大小设置下运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16291427/

相关文章:

java - 我收到 .getDateEditor 错误

java - 如何获取 URL 查询字符串值

debugging - JVM 是否监听 IPv6 调试端口?

garbage-collection - 年轻代中的JVM垃圾收集

Maven Surefire 插件在 java 11 上导致 jvm 崩溃(通过直接写入 fork JVM 1 中的 native 流而损坏 STDOUT)

java - Jboss GC不释放内存

java - 可以在不包含 JVM 的计算机中运行桌面应用程序

java - 非捕获组正则表达式在 Java 中不起作用

java - 为什么 Eclipse 将/jre 添加到我的 JAVA_HOME

java - 结合深度泛型集合