Does G1 GC have a max size of region or max amount of region?
Asked Answered
K

1

6

when i studied G1 GC, I found this article: http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html. In that article, there is something says as follow:

The G1 GC is a regionalized and generational garbage collector, which means that the Java object heap (heap) is divided into a number of equally sized regions. Upon startup, the Java Virtual Machine (JVM) sets the region size. The region sizes can vary from 1 MB to 32 MB depending on the heap size. The goal is to have no more than 2048 regions.

Does that mean the max size of java heap memory that G1 GC can deal with is 2048 * 32M, and if the size exceeds it, what will happen?

Kelcie answered 3/3, 2017 at 2:56 Comment(0)
K
10

From HotSpot JVM sources:

  // 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;
  • MIN_REGION_SIZE (1MB) and MAX_REGION_SIZE (32MB) are hard limits;
  • TARGET_REGION_NUMBER is just a hint that is used to calculate default region size if it is not specified among JVM options. The actual number may exceed this value.
Keri answered 3/3, 2017 at 7:52 Comment(4)
Is there any wisdom about why/when you would want to adjust your region sizes with -XX:G1HeapRegionSize? For example, I've noticed that in Minecraft distributions it is set to 32MB by default - well above the default for the JVM.Nakasuji
@Nakasuji For example, increasing region size helps to reduce the amount of humongous allocations.Keri
does G1 have any upperlimit on memory or it's good even till a TB of heapsize?Lamellibranch
@Lamellibranch Solely depends on the application, its allocation rate and pattern. G1 might handle that large heaps, but whether GC pauses will be acceptable in your case - I can't know.Keri

© 2022 - 2024 — McMap. All rights reserved.