Question about G1CollectedHeap::print_on()

Stefan Johansson stefan.johansson at oracle.com
Wed Oct 11 12:43:11 UTC 2017


Hi Thomas,

On 2017-10-11 14:16, Thomas Stüfe wrote:
> Hi Stefan,
>
> On Wed, Oct 11, 2017 at 1:52 PM, Stefan Johansson 
> <stefan.johansson at oracle.com <mailto:stefan.johansson at oracle.com>> wrote:
>
>     Hi Thomas,
>
>     Seems like you found a bug here. As you say, for G1 the "commit
>     watermark" doesn't really make sense, because we can have regions
>     uncommitted in the middle of the heap. I think we print the value
>     to look similar to the other heaps/GCs. The bug here is that we
>     don't multiply with the region size, but just add it. So we should
>     change the row in question to:
>       p2i(_hrm.reserved().start() + (_hrm.length() *
>     HeapRegion::GrainWords)),
>
>     This would give a better value. It would not be the whole truth,
>     since there might still be objects above this address if we have
>     uncommitted regions in the heap. I better value might be "highest
>     region committed" * "heap region size", but that would lie because
>     not all memory below that has to be committed.
>
>     I created a bug for this:
>     https://bugs.openjdk.java.net/browse/JDK-8189169
>     <https://bugs.openjdk.java.net/browse/JDK-8189169>
>
>
> Thank you for taking a look.
>
> Would it not make more sense to just omit the middle address value 
> then for g1?
Yes, that might actually make most sense.
>
> If I understand HeapRegionManager::commit_regions() / 
> uncommit_regions() correctly, comitted and uncomitted regions can 
> freely interleave, and _hrm.length() is just a counter, not an address 
> range. So we would print a theoretical address value - the end of the 
> committed memory if all regions were located consecutively. But how 
> useful could that be?
>
> When I look at the commit boundary value in hs-err files, I usually do 
> this to check if a heap pointer points into valid memory or into 
> uncomitted memory. For that, I would prefer the value to be exact or 
> not be there.
>
I agree, this was the part about "not the whole truth". And I agree with 
you, the best way is probably to just remove it. I never use this value 
for G1, I always look at the region table to check if pointers are valid 
or not.

Thanks,
Stefan
> Thanks, Thomas
>
>     Cheers,
>     Stefan
>
>
>
>     On 2017-10-11 12:48, Thomas Stüfe wrote:
>
>         Hi all,
>
>         In a customer error file I found the following output:
>
>         Heap:
>          garbage-first heap   total 2592768K, used 1914672K
>         [0x0000000679000000, 0x0000000679104f20, 0x00000007f0000000).
>
>         I wonder about the middle address value (0x0000000679104f20).
>         I was assuming this to be the commit watermark. But the value
>         seemed awfully low - just ~1MB beyond the start address of the
>         reserved area. Given that about 4/5th of the heap is in-use,
>         this seemed odd.
>
>         Looking at the code:
>
>         void G1CollectedHeap::print_on(outputStream* st) const {
>         ....
>           st->print(" [" PTR_FORMAT ", " PTR_FORMAT ", " PTR_FORMAT ")",
>                     p2i(_hrm.reserved().start()),
>                 >>    p2i(_hrm.reserved().start() + _hrm.length() +
>         HeapRegion::GrainWords), <<
>                     p2i(_hrm.reserved().end()));
>         ...
>         }
>
>         I am still confused. What is "_hrm.reserved().start() +
>         _hrm.length() + HeapRegion::GrainWords"?  We add the number of
>         comitted heap regions to the start address, plus the size of
>         one heap region in words? Sorry, I am not a GC expert, could
>         someone clarify what this address is?
>
>         Another question, while looking further into how g1 commits
>         memory I looked at G1PageBasedVirtualSpace and it seems to me
>         that there is no clear commit water mark because pages do not
>         have to be committed sequentially, is that correct?
>
>         Thanks for clarifying!
>
>         Kind Regards, Thomas
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20171011/70c7be37/attachment.htm>


More information about the hotspot-gc-dev mailing list