4核8g的机器针对于这个系统的jvm参数如下:
-Xms4096M
-Xmx4096M
-Xmn3072M
-Xss1M
-XX:PermSize=256M
-XX:MaxPermSize=256M
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFaction=92
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
1.为什么设置4g的堆内存大小?
8g的机器一般分配一半的最大内存就可以了,因为机器本上还要占用一定内存
2.为什么设置3g的新生代内存空间?
为了让对象尽可能的在新生代的eden区和survivor区按照默认8:1:1的比例来分配时尽可能的让survivor区内存多一点,达到300兆左右,这样可以防止每次垃圾回收过后对象几十兆,这几十兆可能是部分请求未处理完毕,是一定会发生的.所以这些对象肯定会触发动态年龄判定规则,让部分对象进入老年代.
3.CMSFullGCsBeforeCompaction设置为0,然后CMSInitiatingOccupancyFaction设置为92为什么?
首先CMSInitiatingOccupancyFaction设置为92,证明在当老年代的内存使用率到达92%,之后就需要进行fullgc了
但是一般设置该值都比较低才对,因为存在内存碎片的问题.可能还没使用那么多内存,剩余内存就因为内存碎片而放不下了,就会进行fullgc.所以一般设置低一点.保证fullgc之后可以有剩余内存可以放入对象.
但是为什么这里设置为92呢.因为CMSFullGCsBeforeCompaction设置为0了,意思是每次在