RFR: JDK-8171084: heapdump/JMapHeapCore fails with java.lang.RuntimeException: Heap segment size overflow

Dmitry Samersoff dmitry.samersoff at oracle.com
Thu Jan 26 09:19:17 UTC 2017


Jini,

The changes looks good to me besides some nits (below) don't need to
re-review.

HeapHprofBinWriter.java

  494 - missed space before bracket

  536, 810 - could you add something like "Unknown type " to "shouldn't
reach here" message.

  751, 769 - it might be better to create a separate int headerSize()
function.

heapDumper.cpp:1077

  I understand the reason of removing do-nothing code, but it's the only
changes outside of SA and it clearly out of scope of this CR.

 So it might be better to don't change hotspot heapdumper.

TestHeapDumpForLargeArray.java:

  I'm not sure we should add long and resource consuming test to
every-night test pile.

  It might be better to add @ignore to this test with a proper comments
and run it manually if we see a problem with SA dumper (but it's just an
opinion - I'm OK to leave it as is).

-Dmitry


On 2017-01-26 11:26, Jini George wrote:
> Modified webrev:
> <http://cr.openjdk.java.net/%7Ejgeorge/8171084/webrev.01/index.html>http://cr.openjdk.java.net/~jgeorge/8171084/webrev.01/index.html
> 
> Requesting one more Reviewer also to take a look at this.
> 
> Thank you,
> Jini.
> 
> On 1/23/2017 2:10 PM, Jini George wrote:
>> Thanks much for the review, David. My answers inline:
>>
>>>   870     protected void writeInstance(Instance instance, int length)
>>> throws IOException {
>>>
>>> seems incorrect. It adds a length parameter that is unused and also
>>> creates an overload, rather than override of the inherited version.
>>> As a result this code:
>> Thank you for this very good catch! This was an accidental cut-n-paste
>> error. I have corrected this.
>>> Minor nit:
>>>
>>> 379     private static final long MAX_U4_VALUE = 4294967295L;
>>>
>>> would be clearer as:
>>>
>>> 379     private static final long MAX_U4_VALUE = 0xFFFFFFFFL;
>>>
>> Makes sense. Done.
>>> test/serviceability/sa/LingeredAppWithLargeArray.java
>>>
>>> Style nit:
>>>
>>>  27     public int hugeArray[];
>>>
>>> should be
>>>
>>>  27     public int[] hugeArray;
>>>
>>> but why public ??
>> No particular reason. Changed it.
>>>
>>> I don't know how LingeredApp works, but this looks odd:
>>>
>>> 32     public static void main(String args[]) {
>>> 33         LingeredAppWithLargeArray appObject = new
>>> LingeredAppWithLargeArray();
>>> 34         LingeredApp.main(args);
>>> 35     }
>>>
>>> as the appObject is never used. ??
>> I have changed the test case now to have the array allocation done in
>> main() and not in the constructor.
>>>   test/serviceability/sa/TestHeapDumpForLargeArray.java
>>>
>>> Why is the test excluded on Mac? 
>> There used to be SA related failures on Mac a while back, but it seems
>> those have gotten fixed with 8169638
>> <https://bugs.openjdk.java.net/browse/JDK-8169638> and probably 
>> 8160376 <https://bugs.openjdk.java.net/browse/JDK-8160376>. I am
>> removing the restriction and will be running the tests. Planning on
>> sending out a new webrev once the testing comes clean.
>>
>> Thanks,
>> Jini.
> 


-- 
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.


More information about the serviceability-dev mailing list