目录
案例2:请求高峰期发生fullgc,单次暂停时间特别长(CMS)
案例1:Fullgc和minorgc频繁
空间紧张,对象晋升阈值降低,导致本来很多生存周期很短的对象也会被晋升到老年代,进而导致频繁的fullgc的发生
方法:因为新生代内存太小,内存优化先从新生代开始,适当调大新生代内存,内存充裕,新生代垃圾回收就没那么频繁,同时增大了幸存区的空间以及晋升的阈值,就可以让很多生命周期较短的对象尽可能的被留在新生代,而不要晋升到老年代,进一步让老年代的fullgc也不容易出现,老年代的fullgc也不那么频繁了
案例2:请求高峰期发生fullgc,单次暂停时间特别长(CMS)
发生在cms重新标记阶段,会扫描整个堆内存,扫描老年代,新生代对象,新生代对象个数比较多,时间耗费长
方法:在重新标记发生之前,先对新生代对象做一次垃圾清理,清理之后存活对象少了,到了重新标记阶段需要查找和标记的对象也变得比以前少的多
案例3:老年代充裕情况下,发生fullgc
碎片过多或并发失败会导致老年代空间不足,但是经排查都不是
因为使用(CMS jdk1.7)采用永久代 永久代空间不足也会导致fullgc
1.8之后改为元空间,不由java控制,使用操作系统空间一般比较充裕
但是1.7之前由于永久代空间不足会触发整个堆的一次fullgc