其实G1是个性情难捉摸的姑娘。她平时非常温和,和声和气。你对她做了啥不好的事情她都先忍着不管,面上还是温顺的。
然后渐渐她就积累了很多负能量但面上还是笑容以对。最后负能量撑爆了她的心,她就一口气从温顺豹変成泼妇!Boom!就full GC个不停了… G1酱在爆炸前最擅长的事情就是只看美好的事物来保持乐观(只收集存活率低的region)。
对不好的事情视而不见。鸵鸟战术。 G1这个就是好脾气但是最终还是可能会爆炸的姑娘。
她会爆炸除了自己对自己的脾气还没彻底把握好之外,还有就是常常受到不合理的要求所压迫。
G1的策略就是乐观地希望可以维持在只收集存活率低的region这个模式上。
每收集了一些之后,寄希望于新的垃圾所需空间可以由刚刚回收来的空间所满足。这样就彻底不用看那些收集开销高的region(存活率高的region)。
而这样的好处之一是运气好的话那些原本存活率高的region过了一段时间之后里面的对象也开始死了,存活率就降下来了,到时候再收集效果更好。
但是!上面的好情况要维持的话,就必须让G1每次能收集足够多的“存活率相对低”的region。而这就受到了用户配置的pause target所限制。pause target配置得太低的话,一开始G1会最大限度尝试满足这个目标,结果就是只能选择非常少量的region放进CSet(collection set)里去收集。这样就等于人为给G1酱堆积负能量。
过不了多久G1酱就会发现在给定的pause target内连一次mixed GC也不可能完成了。这就会开始连续full GC的噩梦。不正确的-Xmn和max pause target配置是G1实际行为不佳的主要原因之一 (剩下当然还有很多原因是G1自身的实现还不够完善) CMS酱和G1酱的理念是完全不同的。
CMS酱的理念是,打扫房间时可以跟主人工作同时进行,尽可能少干扰主人工作。
而G1酱的理念是,我打扫你就别动—没事我很快的啦,你就忍忍吧,我就挑容易打扫的地方搞搞就还给你啦。
No Leanote account? Sign up now.