RFR: 8176026: SA: Huge heap sizes cause a negative value to be displayed in the jhisto heap total

Koichi Sakata ksakata at openjdk.java.net
Fri Mar 19 12:11:53 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.

#### 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 22463
Attaching to process 22463, please wait...
hsdb> jhisto

300:            3410    19327547600     byte[]
Total :         16145   19328155080
Heap traversal took 1.981 seconds.

-------------

Commit messages:
 - Use long instead of int
 - Output proper total size when using huge heap

Changes: https://git.openjdk.java.net/jdk/pull/3087/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3087&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8176026
  Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 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