Major GC和Minor GC频繁:
服务情况:Minor GC每分钟100次 ,Major GC每4分钟一次,单次Minor GC耗时25ms,单次Major GC耗时200ms。
知识点:单次Minor GC时间更多取决于GC后存活对象的数量,而非Eden区的大小。
小结:如果应用存在大量的短期对象,应该选择较大的年轻代;如果存在相对较多的持久对象,老年代应该适当增大。
扩展:动态年龄计算???
请求高峰期发生GC,导致服务可用性下降:
CMS:
1. Init-mark初始标记(STW) ,该阶段进行可达性分析,标记GC ROOT能直接关联到的对象,所以很快。
2. Concurrent-mark并发标记,由前阶段标记过的绿色对象出发,所有可到达的对象都在本阶段中标记。
2.5:并发预清理理阶段,减少下一个阶段"重新标记"的⼯作。
3. Remark重标记(STW) ,暂停所有用户线程,重新扫描堆中的对象,进行可达性分析,标记活着的对象。因为并发标记阶段是和用户线程并发执行的过程,所以该过程中可能有用户线程修改某些活跃对象的字段,指向了一个未标记过的对象,需要 STW,这个阶段是以新生代中对象为根来判断对象是否存活的。
4. 并发清理,进行并发的垃圾清理。
小结:由于跨