1、什么是GC
GC(Garbage Collection)垃圾回收器 ,在JVM执行引擎中自带这样一个GC系统,此系统会根据一定的算法监控内存和回收垃圾对象。
2、GC时要考虑哪些问题
1、如何判断对象是可回收对象;
2、使用什么算法进行回收;
3、执行GC的线程策略是什么;
3、如何判定哪些对象是垃圾对象
1、通过引用计数器
在对象中添加一个引用计数器,当对象被引用计数器+1,对象没被任何引用则计数器为0,GC可以回收;
2、可达性分析
从GC Root对象无法找到这个对象,此对象就是垃圾对象;
GC Root对象:
1、类变量、常量直接引用的对象;
2、实例变量直接引用的对象;
3、局部变量、参数变量直接引用的对象;
............
4、常用的GC算法
1、标记清除法
扫描内存,对存活的对象进行标记,再次扫描内存,清楚未标记的对象;
2、标记复制法
先扫描内存,标记存活对象,将对象复制到另一块区域中;
再次扫描内存,清除所有的对象;
3、标记整理法
先扫描内存,标记存活对象,将存活对象移动到内存一侧,再清楚另一侧的垃圾对象;
5、GC时的线程策略
1、串行(只允许GC或业务其中一个线程执行);
2、并行(利用多核CPU优势并行执行GC);
3、并发(允许GC线程和业务线程并发执行)。
6、JVM中有哪些常见的垃圾回收器
1、Serial(串行垃圾回收器)
特点:
1.内部使用一个线程进行垃圾回收,不能执行并行化;
2.执行GC时其他所有业务都要暂停。
2、Parallel/Parallel-New(并行垃圾回收器)
特点:
1.内部多个线程并行执行GC,发挥了多核CPU的优势,减少业务暂停时间;
2.执行GC时其他业务都会被暂停。
3、CMS(并发垃圾回收器)----使用增量更新预防对象消失
特点:
1.内部多个线程并行执行GC,发挥了多核CPU的优势,减少业务暂停时间;
2.GC和用户业务线程并发执行;
3.新生代使用标记复制算法、老年代使用标记清除算法。
4、G1(基于大内存的并发垃圾回收器)----使用快照预防对象消失
特点:
1.工作于服务器模式,主要面向多核、大内存的服务器应用;
2.整个堆不再分成连续的年轻代和老年代,而是划分为了多个小堆区;
3.GC时不会每次收集整个堆,而是以增量方法进行GC操作,每次只是对一个小堆区进行GC;
4.可以在吞吐量和响应时间上达到一种相对的平衡;
5.年轻代使用标记复制算法,老年代使用标记整理算法。