熟悉jvm垃圾收集器,有线上的优化经验
1.垃圾收集器的发展历史 :
-
最开始的垃圾回收器是单线程的,也就是只有一个线程在清理垃圾。
-
为了加快清理垃圾的效率,采用了多线程的垃圾回收器,这时候回收的时候依然要暂停用户线程,直观的感受就是卡顿
-
为了减少卡顿时间,收集器将一些时间消耗多的步骤,改为了用户线程和垃圾回收线程的同时执行
2.性能优化
-
一般后端开发都是从减少卡顿时间出发,那种纯计算的不需要响应的会从增大吞吐量出发 :什么意思,就是用户线程和垃圾回收线程同时执行的时候,必然吞吐量就下降了
-
减少卡顿就是减少fullGc,可以调整年轻代的内存大小,年轻代大对象的阈值,让垃圾对象尽可能的在年轻代被回收掉
垃圾回收过程
- cms :
1.1 单独标记 :根基GCROOT和根对象
1.2.并发标记 :
1.3.重新标记 :
1.4.并发清除 :本来是垃圾变成了不是垃圾清除了怎么办
补充一句 : 开发两年了,这个东西就没碰过