GC干货

1、young gc

 

2、对象进入老年代时机

  

3、old gc

 

 晋升担保机制

4、gc优化

a、如何设置jvm参数
估算: 系统qps 创建对象个数 请求对象总大小 每秒使用内存空间
目标:尽可能让每次youngc后存活的对象远远小于survivor区域 避免对象频繁进入老年代触发fullgc
理想状态: 系统几乎不发生fullgc。 老年代的对象比较稳定,长期使用的对象 躲过了15次younggc后晋升的对象

系统压测模拟线上并发的压力
用jstat观察gc日志

b、fullgc的表现
cpu负载高
系统无法处理请求或处理过慢

c、fullgc常见原因
系统并发过高或处理数据量大,导致youngc频繁,而且每次younggc过后存活对象太多,内存分配不合理,survivor区域过小,导致对象频繁进入到老年代,频繁触发full gc

系统一次性加载过多的数据到内存中,有很多大对象,导致频繁进入老年代,频繁触发fullgc

发生了内存泄露,大量对象无法回收,一直在老年代里,频繁触发fullgc

metaspace因为加载类过来触发fullgc

调用了System.gc()

整理一份参数模板使用

5、 内存溢出

metaspace:

a 使用默认参数 依赖了很多的外部jar 导致太小不够用
b 使用了cglib会动态生成很多类 没有控制好数量

栈:
递归的方法调用

堆:

高并发请求 

内存泄漏



原文地址:https://www.cnblogs.com/huilei/p/12558847.html