GC有代价,因此根本原则是每次GC都回收尽可能多的对象。
针对CMS和G1有相应策略。
最重要的是合理地设置年轻代和年老代大小。
-
年轻代太小,会导致频繁Minor GC,并且很有可能存活期短的对象也不能被回收,GC的效率就不高
-
年老代太小,容纳不下从年轻代过来的新对象,会频繁触发单线程Full GC,导致较长时间的GC暂停,影响Web应用的响应时间。
不推荐直接设置年轻代大小,和CMS不不同,因为G1会根据算法动态决定年轻代和年老代大小。
因此对于G1,最关心Java堆总大小(-Xmx)。
-XX:MaxGCPauseMillis = n
限制最大GC暂停时间,以尽量不影响请求的响应时间。G1将根据先前收集信息及检测到的垃圾量,估计它可以立即收集的最大区域数量,从而尽量保证GC时间不会超出这个限制。因此G1更“智能”,使用更简单。
==================================================&#