wilx opened a new pull request, #9486:
URL: https://github.com/apache/netbeans/pull/9486
Fixes #6357.
`ROOT_STICKY_CLASS` roots can refer to class object ids that are known from
`LOAD_CLASS` records but are not represented as resolvable `Instance`s by this
parser. In the attached issue dump, the failing sticky-class roots are known
loaded classes, but `GCRoot.getInstance()` returns `null` for them.
`LOAD_CLASS` records 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 an `Instance`; that comes
from matching heap dump records such as `CLASS_DUMP`. When a sticky-class root
points at a `LOAD_CLASS` id without a matching resolvable instance entry, the
parser can identify the loaded class metadata but cannot return an `Instance`,
so the result is `null`.
`HprofGCRoots.getGCRoot(Long)` assumed every parsed GC root has a non-null
`Instance` when building its instance lookup map. That made retained-size
computation fail with a `NullPointerException` before 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:
- Reproduced the original NPE with the dump from issue #6357 before the fix.
- Verified the same `getBiggestObjectsByRetainedSize(15)` reproducer
succeeds with the fixed profiler jar.
- Ran `HeapSegmentTest`: `OK (3 tests)`.
- Ran broader heap unit classes; only the existing `testHeapDumpLog`
golden-file assertions failed due to JVM system property output differences,
unrelated to this change.
Assisted-by: OpenAI GPT-5 Codex
---
**^Add meaningful description above**
<details open>
<summary>Click to collapse/expand PR instructions</summary>
By opening a pull request you confirm that, unless explicitly stated
otherwise, the changes -
- are all your own work, and you have the right to contribute them.
- are contributed solely under the terms and conditions of the Apache
License 2.0 (see section 5 of the license for more information).
### LLMs, Commit messages and PR description:
- Please make sure (eg. `git log`) that all commits have a valid name and
email address for you in the Author field.
- LLM assisted commits should be attributed with an `Assisted-by:
MODEL_NAME MODEL_VERSION` line appended to the commit message.
- Please mention coding assistance in the PR description too (eg. by
adding the same `Assisted-by` line from above)
- Please describe the changes in your own words - we'd like to know you
understand the changes being made!
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:
1. [ ] Was this PR [correctly
labeled](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=240884239#PRsandYouAreviewerGuide-PRtriggeredCIJobs(conditionalCIpipeline)),
did the right tests run? When did they run?
2. [ ] Is this PR
[squashed](https://cwiki.apache.org/confluence/display/NETBEANS/git%3A+squash+and+merge)?
3. [ ] Are author name / email address correct? Are
[co-authors](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors#creating-a-commit-with-multiple-authors-on-the-command-line)
correctly listed? Do the commit messages need updates?
3. [ ] Does the PR title and description still fit after the Nth iteration?
Is the description sufficient to appear in the release notes?
If this PR targets the delivery branch: [don't
merge](https://cwiki.apache.org/confluence/display/NETBEANS/Pull+requests+for+delivery).
([full wiki
article](https://cwiki.apache.org/confluence/display/NETBEANS/PRs+and+You+-+A+reviewer+Guide))
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists