RFR: 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods

Leo Korinth leo.korinth at oracle.com
Mon Dec 11 14:32:03 UTC 2017


Hi,

The bot_updates parameter is removed so that the code is easier to read. 
The original idea behind the parameter is that the compiler will be able 
to remove a branch instruction (in certain cases) because the value will 
be known at compile time. As several classes inherits from the base 
G1AllocRegion the member variable _bot_updates is not known to the base 
class though it is always set to the same value in each of the separate 
sub classes.

I made the constructor G1GCAllocRegion protected (from public) to better 
show that that each *AllocRegion class with public constructor will have 
a fixed _bot_updates value (per class).

Another solution (not the proposed solution) is to use templates. This 
will give the compiler exact knowledge of the _bot_updates value at 
compile time. Templates could also be used to give compile time 
information about the value of InCSetState _purpose in the classes 
SurvivorGCAllocRegion and OldGCAllocRegion.

The template solution is quite verbose as parts of the code is located 
in a cpp file. Because of this I think just removing the parameter (the 
propose solution) is the way to go. The code becomes easier to read, the 
change is smaller, and energy can be put in code paths that will make a 
real difference.

Bug:
https://bugs.openjdk.java.net/browse/JDK-8133805

Webrev:
http://cr.openjdk.java.net/~lkorinth/8133805/00/

Testing:
mach5 hs-tier1,hs-tier2

Thanks,
Leo


More information about the hotspot-gc-dev mailing list