Mercurial > hg > truffle
diff src/share/vm/gc_implementation/g1/heapRegion.hpp @ 942:2c79770d1f6e
6819085: G1: use larger and/or user settable region size
Summary: Instead of the region size being hard-coded, allow the user to set it.
Reviewed-by: jmasa, johnc, apetrusenko
author | tonyp |
---|---|
date | Thu, 30 Jul 2009 16:22:58 -0400 |
parents | 830ca2573896 |
children | ff2402f6a50b |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/heapRegion.hpp Wed Sep 02 00:04:29 2009 -0700 +++ b/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Jul 30 16:22:58 2009 -0400 @@ -297,15 +297,24 @@ HeapRegion(G1BlockOffsetSharedArray* sharedOffsetArray, MemRegion mr, bool is_zeroed); - enum SomePublicConstants { - // HeapRegions are GrainBytes-aligned - // and have sizes that are multiples of GrainBytes. - LogOfHRGrainBytes = 20, - LogOfHRGrainWords = LogOfHRGrainBytes - LogHeapWordSize, - GrainBytes = 1 << LogOfHRGrainBytes, - GrainWords = 1 <<LogOfHRGrainWords, - MaxAge = 2, NoOfAges = MaxAge+1 - }; + static int LogOfHRGrainBytes; + static int LogOfHRGrainWords; + // The normal type of these should be size_t. However, they used to + // be members of an enum before and they are assumed by the + // compilers to be ints. To avoid going and fixing all their uses, + // I'm declaring them as ints. I'm not anticipating heap region + // sizes to reach anywhere near 2g, so using an int here is safe. + static int GrainBytes; + static int GrainWords; + static int CardsPerRegion; + + // It sets up the heap region size (GrainBytes / GrainWords), as + // well as other related fields that are based on the heap region + // size (LogOfHRGrainBytes / LogOfHRGrainWords / + // CardsPerRegion). All those fields are considered constant + // throughout the JVM's execution, therefore they should only be set + // up once during initialization time. + static void setup_heap_region_size(uintx min_heap_size); enum ClaimValues { InitialClaimValue = 0,