On Wed, 26 Aug 2026 13:31:57 GMT, Oli Gillespie <[email protected]> wrote:
> Please review this simple change to remove filler arrays (and objects) from > heap dumps. In the hprof format, they are not distinguishable from `int[]`, > which can be confusing (where are these huge `int[]`s coming from in my > application?), and they bloat the heap dump time and size. > > (Note: I sent a request for comments [on the serviceability-dev mailing > list](https://mail.openjdk.org/archives/list/[email protected]/thread/USL6YYR2UW76Z4VFESN225ZASLL2DHYQ/) > but got no response, so made a PR) > > Using Eclipse MAT, before: > > with-filler.hprof - 6.2GB > > Class Name | Objects | Shallow Heap > ===================================== > byte[] 39,938 4,997,553,360 > int[] 45,839 1,140,524,000 > > > After: > > without-filler.hprof - 5.0GB > > Class Name | Objects | Shallow Heap > ===================================== > byte[] 48,321 4,998,520,248 > int[] 4,995 951,088 > > > ([Test > file](https://gist.github.com/olivergillespie/1661499afb9e1c708de30cf0bdfca30e)) > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai). Looks good to me. I think the argument that filler objects are "synthetic" is solid, and indeed I has worked through my own share of confusions about large `int[]` arrays in heap dumps. src/hotspot/share/services/heapDumper.cpp line 2206: > 2204: } > 2205: > 2206: if (CollectedHeap::is_filler_object(o)) { OK, so `mark_dormant_archived_object` filters objects with classes which Java mirrors have not yet loaded. But for filler objects, I expect `Universe::fillerArrayKlass()` and `vmClasses::FillerObject_klass()` to be fully loaded at all times. So we can filter filler objects ignoring the dormant class check. ------------- Marked as reviewed by shade (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/32542#pullrequestreview-5032484209 PR Review Comment: https://git.openjdk.org/jdk/pull/32542#discussion_r3864473465
