面试题:新的G1垃圾回收器的工作原理是怎样的?
面试题常规回答
G1回收器可以同时回收新生代和老年代的对象的,不需要使用ParNew + CMS
的组合实现新生代和老年代的垃圾回收,G1可以直接搞定。工作原理大致就是将堆内存统一划分为大小相等的多个Region区域,然后有一个预期的垃圾回收停顿时间的设置,通过这个预期值,G1会判断每个Region的回收需要耗费的时间,如果时间很短远小于预期的停顿时间,那么这个Region就很**值得回收(回收价值)**了,这个时候G1就通过这样的计算,将很多值得回收的Region直接进行快速回收,并且保证这个过程中的停顿时间小于预期的停顿时间。
面试题深入剖析
首先我们可以可以使用-XX:+UseG1GC
来指定使用G1垃圾回收器,此时G1会自动用堆大小除以2048,由此得出每个Region占用的内存大小。
因为JVM最多可以有2048个Region,然后Region的大小必须是2的倍数,比如说1MB、2MB、4MB之类的。
比如说堆大小是8G,那么就是8192MB,此时除以2048个Region,每个Region的大小就是4MB。G1回收器大概就是这样子来决定Region的数量和大小的。
然后Region中存放的是新生代还是老年代对象,这些都是动态改变的。