虚拟机参数总结
跨代引用问题:
新生代中对象对老年代的对象有引用,垃圾回收时,不会回收,多次标记后,新生代(minor)进入老年代,老年代对象增多,可发生Major GC。
权衡老年代垃圾回收的解决方案-----记忆集,原因: 通过扫描记忆集标记GC roots 相对于扫描整个老年代性能更高。
卡表与记忆集, 记忆集是一种抽象的数据结构,卡表是记忆集的具体实现。
卡表中每一个元素对应的一块区域,称为卡页。
-XX:+UseCondCardMark 用来决定是否开启卡表更新的条件判断。(可以避免卡表记录时的伪共享问题)会增加一次条件判断,性能上有所损耗。
-XX:+UseConcMarkSweepGC 开启cms 垃圾回收(配置使用用于老年代,算法:标记整理算法 ;新生代: ParNew 或者serial)
-XX:+UseParNewGC 开启parnew 垃圾回收器。
针对Parallel Scavenge 收集器
-XX:+MaxGCPauseMillis (大于0 的数)
-XX:+GCTimeRatio (0-100) 的数控制垃圾收集所占的运行时间比例。
-XX:+UseAdaptiveSizePolicy 开关参数,自适应设置Eden和Survivor的比例,只需要设置-Xmx 最大堆数值和-XX:+MaxGCPauseMillis
-----Parallel Scavenge
-- SerialOld
-XX:PretenureSizeThreshold=3145728 (表示3m) 如果设置,新生的对象只要超过3M就会直接进入老年的。参数原因:避免新生区eden 和suvivor区进行复制对象。】‘
--针对CMS垃圾回收器
--XX:CMSInitiatingOccupancyFraction 设置触发一次 Full GC ,主要浮动碎片(并发标记时导致浮动碎片)
-XX:G1HeapRegionSize 设置region的大小1M-32M ,2的幂。超过region的放到Humongous区域中。
-XX:MaxTenuringThreshold=1 设置进入老年代的age计数器。