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