Fix unresolved sticky class GC roots#9486
Conversation
Assisted-by: OpenAI GPT-5 Codex
|
I dug further into this, and this PR is only a stopgap. It prevents the crash, but it does not solve the underlying modeling issue.
A fuller fix would probably need to resolve sticky-class roots through the class-dump model, e.g. to a |
Fixes #6357.
ROOT_STICKY_CLASSroots can refer to class object ids that are known fromLOAD_CLASSrecords but are not represented as resolvableInstances by this parser. In the attached issue dump, the failing sticky-class roots are known loaded classes, butGCRoot.getInstance()returnsnullfor them.LOAD_CLASSrecords describe classes loaded by the VM: they provide the class object id and class name metadata. They do not by themselves provide the full heap object data that NetBeans uses to construct anInstance; that comes from matching heap dump records such asCLASS_DUMP. When a sticky-class root points at aLOAD_CLASSid without a matching resolvable instance entry, the parser can identify the loaded class metadata but cannot return anInstance, so the result isnull.HprofGCRoots.getGCRoot(Long)assumed every parsed GC root has a non-nullInstancewhen building its instance lookup map. That made retained-size computation fail with aNullPointerExceptionbefore it could finish walking nearest GC roots.This change makes the GC-root lookup tolerate those unresolved roots. I also added a small synthetic HPROF regression that writes an unresolved sticky class root and verifies GC-root lookup handles it.
Validation performed:
getBiggestObjectsByRetainedSize(15)reproducer succeeds with the fixed profiler jar.HeapSegmentTest:OK (3 tests).testHeapDumpLoggolden-file assertions failed due to JVM system property output differences, unrelated to this change.Assisted-by: OpenAI GPT-5 Codex
^Add meaningful description above
Click to collapse/expand PR instructions
By opening a pull request you confirm that, unless explicitly stated otherwise, the changes -
LLMs, Commit messages and PR description:
git log) that all commits have a valid name and email address for you in the Author field.Assisted-by: MODEL_NAME MODEL_VERSIONline appended to the commit message.Assisted-byline from above)If you're a first time contributor, see the Contributing guidelines for more information.
If you're a committer, please label the PR before pressing "Create pull request" so that the right test jobs can run.
PR approval and merge checklist:
If this PR targets the delivery branch: don't merge. (full wiki article)