RFR: 8176026: SA: Huge heap sizes cause a negative value to be displayed in the jhisto heap total [v3]
Koichi Sakata
ksakata at openjdk.java.net
Fri Mar 26 13:51:40 UTC 2021
> When a heap is used more than about 2.1GB, clhsdb jhisto shows a negative number in the total field.
>
> $ java -Xmx20g Sample
>
> $ jhsdb clhsdb --pid 5773
> Attaching to process 5773, please wait...
> hsdb> jhisto
> ...
> 299: 1 16 jdk.internal.misc.Unsafe
> 300: 3402 10737610256 byte[]
> Total : 15823 -2146661280
> Heap traversal took 1.793 seconds.
> (Incidentally, the Sample is a program that only allocates many objects.)
>
> #### Details
> This is because in ObjectHistogram class the totalSize variable is int type.
>
> The total size is the total of ObjectHistogramElement#getSize() and getSize() returns long. So I changed int to long in the ObjectHistogram class.
>
> Additionally, I changed the type of the totalCount. This doesn't cause a bug, but ObjectHistogramElement#getCount() also returns long. So it doesn't need to treat it as int, I think. ObjectHistogramElement#compare() also do the same thing, so a class that is a huge size show the bottom of the list.
>
> #### Tests
> The jtreg test was successful.
> $ sudo make run-test TEST=serviceability/sa/ClhsdbJhisto.java
>
> $ cat build/linux-x86_64-server-fastdebug/test-results/jtreg_test_hotspot_jtreg_serviceability_sa_ClhsdbJhisto_java/text/summary.txt
> serviceability/sa/ClhsdbJhisto.java Passed. Execution successful
>
> I confirmed the output with the same program.
>
> $ ./jdk/build/linux-x86_64-server-fastdebug/jdk/bin/java -Xmx20g Sample
> $ ./jdk/build/linux-x86_64-server-fastdebug/jdk/bin/jhsdb clhsdb --pid 10196
> Attaching to process 10196, please wait...
> hsdb> jhisto
> Object Histogram:
>
> num #instances #bytes Class description
> --------------------------------------------------------------------------
> 1: 3405 13958838400 byte[]
> 2: 887 109032 java.lang.Class
> ...
> 300: 1 16 jdk.internal.misc.Unsafe
> Total : 15827 13959470288
> Heap traversal took 1.72 seconds.
Koichi Sakata has updated the pull request incrementally with one additional commit since the last revision:
Update copyright
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/3087/files
- new: https://git.openjdk.java.net/jdk/pull/3087/files/248d49fe..4d3b6f88
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3087&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3087&range=01-02
Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/3087.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3087/head:pull/3087
PR: https://git.openjdk.java.net/jdk/pull/3087
More information about the hotspot-gc-dev
mailing list