一、为什么要了解GC?
GC是java上JVM虚拟机的垃圾回收机制。合理使用,可以避免OOM(内存用完了)问题;可以进行jvm性能调优,提高程序执行效率、可靠性和健壮性。
从以下几个方面进行分析:
- java堆内存结构
- 分代回收算法
- 垃圾回收机制
- GC日志
- jvm参数调优
二、根据java堆内存结构进行分析
java堆内存结构分为新生代、老生代和永久代(注:jdk1.8中为Metaspace)
其中,新生代有三个区,Eden和两个相等的Survivor区(S0、S1),大多数程序new之后就会在Eden区,少部分存活下来才会进入survivor区,存货下来的会放到S0区,然后由复制算法复制到S1,Eden和S0、S1区域大小的比例是8:1:1。新生代对应的垃圾回收器是Serial收集器、ParNew收集器和Parallel Scavenge收集器。
时间再长的进入到老生代中,使用标记清除算法或标记整理算法进行垃圾回收,标记清除算法会存在大量不连续的内存碎片,而内存整理算法改进了这一点。老生代的垃圾回收器是Serial old、Parallel old和CMS收集器。
GC和jvm调优日志参考:https://mp.csdn.net/console/editor/html/104769435
本文参考:https://blog.csdn.net/lilong329329/article/details/82222713