RFR: 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods (original) (raw)

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