NewRatio参数不与CMS垃圾收集器一起使用
我为我的应用程序切换到CMS收集器,应用程序的吞吐量减少了一半。 从GC日志中,我发现很少发生轻微的GC(每秒10 per second
)。 我已经分配了4G
的堆大小。 默认情况下,JVM使用非常小的尺寸(小于40MB
)。 我想通过增加年轻人的规模来尝试CMS。 你能指点我正确的JVM参数吗?
- 我尝试了-XX:NewRatio但是JVM忽略了这个参数,并且年轻的gen大小没有变化
- 我的java版本是
java version "1.6.0_14"
你是如何设置-XX:NewRatio
,以及哪个JVM版本的?
无论如何。 如果您还要设置-XX:MaxNewSize=size
(这是一项function),或者您还要设置-XX:+UseConcMarkSweepGC
这是一个已知错误 ,则可以-XX:+UseConcMarkSweepGC
它。
这个对我有用:
默认值(Windows上的Java 7 64位):
java -Xmx4g -Xms4g -XX:+ PrintGCDetails -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -version java版“1.7.0_07” Java(TM)SE运行时环境(版本1.7.0_07-b10) Java HotSpot(TM)64位服务器VM(内置23.3-b01,混合模式) 堆 新一代共计613440K ,使用21813K 伊甸园空间545344K,使用4% 从space 68096K,使用0% 空间68096K,使用0% 并发标记扫描生成总计3512768K ,使用0K concurrent-mark-sweep perm gen total 21248K,使用2084K
现在指定比率参数(大致相同的结果):
java -Xmx4g -Xms4g -XX:+ PrintGCDetails -XX:NewRatio = 6 -XX:SurvivorRatio = 8 -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -version par新一代总计539264K ,使用19174K 伊甸园空间479360K,使用4% 从space 59904K,使用0% 到空间59904K,使用0% 并发标记扫描生成总计3595136K ,使用0K concurrent-mark-sweep perm gen total 21248K,使用2084K
然后是一个完全不同的新/旧和伊甸园/幸存者比例:
java -Xmx4g -Xms4g -XX:+ PrintGCDetails -XX:NewRatio = 1 -XX:SurvivorRatio = 1 -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -version par新一代总计1398144K ,使用27965K 伊甸园空间699136K,使用4% 来自太空699008K,0%使用 空间699008K,使用0% 并发标记扫描生成总计2097152K ,使用0K concurrent-mark-sweep perm gen total 21248K,使用2084K
对于Java 6或客户端VM也是如此(仅具有不同的默认值)。
- 垃圾收集器(.net / java)是实时系统的问题吗?
- System.gc()由核心API调用
- 当我们将Xmx和Xms设置为相同大小时会发生什么
- Java运行时环境检测到致命错误:pc = 0x00002b2f7e9b2744处的SIGSEGV(0xb),pid = 28778,tid = 1138739520
- 如何确保始终调用finalize()(在Java练习中思考)
- Apache NiFi – OutOfMemory错误:SplitText处理器超出了GC开销限制
- 从Java 6 + Tomcat 6升级到Java 8 + Tomcat 8时的垃圾收集器使用情况
- 强制显式删除Java对象
- 什么可以解释写入堆位置引用的巨大性能损失?