求教为什么UseCompressedOops参数默认要不用G1的情况才开启

elam 2013-04-23

近日在做一些JVM调优的事情
最后实验发现G1比较适合我们的应用场景
但是不知道为什么UseCompressedOops这个参数在使用G1时候默认是关闭的
会和G1产生什么冲突吗?
看了置顶的精华帖
但是没有发现UseCompressedOops和G1的关系是什么

新来贵圈,诚心求教
RednaxelaFX 2013-04-24
首先G1只建议在JDK 7 update 4之后使用。同时处于安全更新的考虑如果使用JDK 7的话请使用最新的update(目前是JDK 7 update 21)。

在这些JDK 7的版本里即便使用G1,UseCompressedOops也是默认打开的,只要GC堆大小在一定范围内。请参考这帖:http://rednaxelafx.iteye.com/blog/1010079
elam 2013-04-24
谢谢撒迦解答
关于G1和安全的问题我也有了解到了
我们是在用7U21
本以为G1和指针压缩有冲突才会被禁掉的
原来只是一个BUG
RednaxelaFX 2013-04-24
原本不是bug,而是当时的G1还不够稳定,所以暂时在使用G1时不默认打开压缩指针。

Oracle/Sun在JDK开发上bug和RFE(request for enhancement)都用同一套bug系统管理。并不是说在bugs.sun.com看到的都是bug。
elam 2013-04-24
那在较低版本中同时启用G1和指针压缩也不会有什么问题喽?
另我们的应用会接受客户端发来的JSON指令,并反序列化成对象进行操作
这样的情况年轻代应该设置的稍大一些吧?
我测试发现貌似NewRatio=1时候的情况比NewRatio=5要好一些
大量的对象在反序列化和读取缓存中产生,然后很快就死掉。
NewRatio=1会不会太激进?
RednaxelaFX 2013-04-24
elam 写道
那在较低版本中同时启用G1和指针压缩也不会有什么问题喽?

都说不够稳定嘛。没准会出啥问题。不要在低于JDK7u4的版本上用G1。

elam 写道
另我们的应用会接受客户端发来的JSON指令,并反序列化成对象进行操作
这样的情况年轻代应该设置的稍大一些吧?
我测试发现貌似NewRatio=1时候的情况比NewRatio=5要好一些
大量的对象在反序列化和读取缓存中产生,然后很快就死掉。
NewRatio=1会不会太激进?

用G1的时候最好先不要显式设置young gen大小,让G1自己判断。G1调优请参考JavaOne 2012上的专题session。
Global site tag (gtag.js) - Google Analytics