RFR(S): 8138681: Runtime.getFreeMemory() reports wrong value after humongous allocation.

Mikael Gerdin mikael.gerdin at oracle.com
Thu Nov 19 14:01:13 UTC 2015


Hi David,

On 2015-11-19 11:08, David Lindholm wrote:
> Hi,
>
> Please review this patch that changes how the usage of humongous regions
> are calculated. Since we (currently) cannot use the remainder of the
> last humongous region, we say that the complete region is used for the
> humongous object.
>
> This is done by setting top=end and adding dummy/filler objects to the
> end of the last region.

It seems strange to me to set the block offset table covering the filler 
object to point to the start of the humongous object.
I would find it more natural to insert the filler object and update the 
block offset table in the loop where the top pointer is set:

for (uint i = first + 1; i < last - 1; ++i) {
   hr = region_at(i);
   hr->set_top(hr->end());
   if (_hr_printer.is_active()) {
	...
   }
}

// Fill out last region
hr = region_at(last - 1);
hr->set_top(obj_top);
HeapWord* fill = hr->allocate(filler_obj_size); // allocate also calls 
alloc_block on the BOT.
fill_with_objects(fill);

/Mikael



>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8138681
> Webrev: http://cr.openjdk.java.net/~david/JDK-8138681/webrev.00/
>
> Testing: Passed JPRT, vm.gc testlist and the attached test from the bug.
>
>
> Thanks,
> David



More information about the hotspot-gc-dev mailing list