如何加群,请参见文末(注:如果之前已经加过的,就不要重复加群了)
1、前文回顾
上篇文章我们给大家分析了一下G1垃圾回收器设计的思想,主要是把内存拆分为很多个小的Region,然后新生代和老年代各自对应一
些Region,回收的时候尽可能挑选停顿时间最短以及回收对象最多的Region,尽量保证达到我们指定的垃圾回收系统停顿时间。
这篇文章我们继续一步一图,把G1垃圾回收器工作的时候,从对象在内存中的分配到垃圾回收的触发,给大家来分析一下。
2、如何设定G1对应的内存大小
大家看如下的图,我们都知道G1对应的是一大堆的Region内存区域,每个Region的大小是一致的。
那么首先思考两个问题:到底有多少个Region呢?每个Region的大小是多大呢?
其实这个默认情况下自动计算和设置的,我们可以给整个堆内存设置一个大小,比如说用“-Xms”和“-Xmx”来设置堆内存的大小。
然后JVM启动的时候一旦发现你使用的是G1垃圾回收器,可以使用“-XX:+UseG1GC”来指定使用G1垃圾回收器,此时会自动用堆大
小除以2048
因为JVM最多可以有2048个Region,然后Region的大小必须是2的倍数,比如说1MB、2MB、4MB之类的。
比如说堆大小是4G,那么就是4096MB,此时除以2048个Region,每个Region的大小就是2MB。大概就是这样子来决定Region的数
量和大小的,大家一般保持默认的计算方式就可以
如果通过手动方式来指定,则是“-XX:G1HeapRegionSize”,如下图。
评论