ho *_*oje 3 java garbage-collection jvm g1gc
当我研究G1 GC时,我发现了这篇文章:http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html.在那篇文章中,有如下内容:
G1 GC是区域化和分代的垃圾收集器,这意味着Java对象堆(堆)被划分为许多大小相等的区域.启动时,Java虚拟机(JVM)设置区域大小.区域大小可以从1 MB到32 MB不等,具体取决于堆大小.目标是不超过2048个地区.
这是否意味着G1 GC可以处理的Java堆内存的最大大小是2048*32M,如果大小超过它,会发生什么?
来自HotSpot JVM源:
// Minimum region size; we won't go lower than that.
// We might want to decrease this in the future, to deal with small
// heaps a bit more efficiently.
static const size_t MIN_REGION_SIZE = 1024 * 1024;
// Maximum region size; we don't go higher than that. There's a good
// reason for having an upper bound. We don't want regions to get too
// large, otherwise cleanup's effectiveness would decrease as there
// will be fewer opportunities to find totally empty regions after
// marking.
static const size_t MAX_REGION_SIZE = 32 * 1024 * 1024;
// The automatic region size calculation will try to have around this
// many regions in the heap (based on the min heap size).
static const size_t TARGET_REGION_NUMBER = 2048;
Run Code Online (Sandbox Code Playgroud)
MIN_REGION_SIZE(1MB)和MAX_REGION_SIZE(32MB)是硬限制;TARGET_REGION_NUMBER如果没有在JVM选项中指定,则只是用于计算默认区域大小的提示.实际数字可能会超过此值.