> 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