一、 GC回收日志打印基本设置
启动设置:
-verbose:gc //开启gc日志
-XX:+PrintGCDetails //打印gc详情
-XX:+PrintGCDateStamps //打印gc时间戳
-XX:+PrintHeapAtGC //在进行GC的前后打印出堆的信息
-Xloggc:gc.log //日志输出名称
-Xms3M //初始内存
-Xmx4M //最大可用内存
日志各个字段含义简述:
2019-03-28 日期
10:02:40.628+0800: 执行回收时间
0.080: 启动JVM到该次垃圾回收时间
GC/Full GC :垃圾回收类型
Allocation Failure : 垃圾回收的原因,此时为Eden区空间不足
ParNew/CMS/Metaspace : 垃圾回收区域 新生代/老年代/元空间
[PSYoungGen: 510K->504K(1024K)] 清理前占用 -> 清理后占用(新生代内存总大小)
PS代表新生代的是使用的是Parallel Scavenge收集器垃圾收集器
[ParOldGen] Par代表老年代使用的是Parallel old垃圾回收器
0.0006474 secs 表示回收的时间
510K->536K(3584K) 整个堆内存清理前占用 ——> 清理后占用(对内存总大小)
[Metaspace: 3304K->3304K(1056768K)] 这部分表示的是方法区的内存大小变化
[Times: user=0.00 sys=0.00, real=0.00 secs]
user 代表的是用户状态耗时0.00,
sys 系统状态耗时0.00,
real CPU实际的执行时间为0.00
Ergonomics:HotSpot自动选择和调优引发的FullGC
二、了解其概念及其区别
我们在实际开发中,往往会执行一些方法加载一些参数值到内存中,后期随着业务的发展、方法的执行等等大量的数据存在内存中,结果导致内存占用过多而产生的溢出异常,因此我们期望自己的放到内存中的对象也具有生命周期(如:内存不足时,jvm会自动回收掉某些对象从而避免OOM的错误)这个时候就需要用到软引用和弱引用
从JDK 1.2之后,Java 对引用的概念进行了扩充,将引用分为了&#