Skip to content

Heap dump analysis#1447

Open
Josh-Matsuoka wants to merge 12 commits into
cryostatio:mainfrom
Josh-Matsuoka:heap-dump-analysis
Open

Heap dump analysis#1447
Josh-Matsuoka wants to merge 12 commits into
cryostatio:mainfrom
Josh-Matsuoka:heap-dump-analysis

Conversation

@Josh-Matsuoka

Copy link
Copy Markdown
Contributor

Welcome to Cryostat! 👋

Before contributing, make sure you have:

  • Read the contributing guidelines
  • Linked a relevant issue which this PR resolves
  • Linked any other relevant issues, PR's, or documentation, if any
  • Resolved all conflicts, if any
  • Rebased your branch PR on top of the latest upstream main branch
  • Attached at least one of the following labels to the PR: [chore, ci, docs, feat, fix, test]
  • Signed all commits using a GPG signature

To recreate commits with GPG signature git fetch upstream && git rebase --force --gpg-sign upstream/main


Related to: #1127

Depends on cryostatio/cryostat-core#666
Depends on cryostatio/cryostat-reports#506

Description of the change:

  • Adds support for heap dump analysis through a new /heapdump/analyze endpoint.
  • Follows the same caching and delegation model as recording reports. Caches analyzed heap dumps in either memory or storage depending on configuration and checks those caches first before re-analyzing a heap dump.

How to manually test:

  1. Run CRYOSTAT_IMAGE=quay.io... bash smoketest.bash...
  2. ...

Opening as draft pending any changes needed for the frontend.

@Josh-Matsuoka Josh-Matsuoka added feat New feature or request safe-to-test labels Apr 1, 2026
@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown

Comment thread src/main/resources/application.properties
Comment thread src/main/java/io/cryostat/diagnostic/DiagnosticsHelper.java
@Josh-Matsuoka

Copy link
Copy Markdown
Contributor Author

Following a discussion on the backend/reports design there are a few points to keep in mind:

  • resource consumption of analyzing a reasonably sized heap dump, how the heap dump is parsed, etc. If the user has a 4GiB heap dump file, what are the minimum requirements (CPU & memory) to be able to analyze that successfully - and how long does the analysis take?
  • If analysis is slow think about whether we can design a progress reporting system somehow, as well as think about designing some way to cancel analyses that have gone on too long and the user doesn't want to complete.
  • Make sure the reports service uses tiered caches: reports stay in-memory for some time, but after eviction from that cache (or if Cryostat is restarted, etc.) then they're still in storage as well.

@andrewazores

Copy link
Copy Markdown
Member

I built each heap dump analysis PR locally and ran a smoketest with last week's Agent build (see #1604):

$ QUARKUS_TEST_IMAGE=quay.io/redhat-java-monitoring/quarkus-cryostat-agent:2026-06-08 ./smoketest.bash -Or -t quarkus-cryostat-agent

Then I captured a heap dump from the quarkus-cryostat-agent test application and tried to generate a report. The request failed with an HTTP 500. Logs from the report generator show this:

2026-06-17 19:58:41,232 ERROR [io.cry.rep.ReportResource] (executor-thread-2) com.fasterxml.jackson.databind.JsonMappingException: Document nesting depth (1001) exceeds the maximum allowed (1000, from `StreamWriteConstraints.getMaxNestingDepth()`) (through reference chain: io.cryostat.core.diagnostic.HeapDumpAnalysis["collectionClusters"]->java.util.Collections$UnmodifiableRandomAccessList[0]->java.util.ArrayList[0]->org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$Collections["list"]->java.util.ArrayList[0]->org.openjdk.jmc.joverflow.support.ClassAndOvhdCombo["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticValues"]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray[0]->org.openjdk.jmc.joverflow.heap.model.JavaObjectArray["clazz"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["superclass"]->org.openjdk.jmc.joverflow.heap.model.JavaClass["staticFields"])
2026-06-17 19:58:41,237 INFO  [io.qua.htt.access-log] (executor-thread-2) 10.89.177.3 - - [17/Jun/2026:19:58:41 +0000] "POST /heapdump/remote_report HTTP/1.1" 500 7

At a glance I can't tell if this is a genuine case of a 1000+ deep nested structure, or if perhaps this is a recursive data structure or even modelling a simple bidirectional relationship and this is choking up the ObjectMapper. Maybe helpful: https://stackoverflow.com/questions/10191671/jackson-json-serialization-recursion-avoidance-by-level-defining

@andrewazores

Copy link
Copy Markdown
Member

Looks more or less the same running the smoketest without -r so that Cryostat itself tries to perform the analysis, but there's a bit more log detail.
heap-dump.txt

@Josh-Matsuoka Josh-Matsuoka marked this pull request as ready for review June 24, 2026 17:22
@andrewazores

Copy link
Copy Markdown
Member

Looks like something's broken with caching. I ran smoketest.bash -O -t quarkus-cryostat-agent (no report generator) after building the -core PR, this one, and -web all together.

Heap dump analysis worked the first time, but after navigating away and back to try to re-analyze the same file, it's failing to load the cached analysis report:

cryostat-1                | 2026-06-26 18:18:02,740 WARN  [com.github.benmanes.caffeine.cache.LocalAsyncCache] (executor-thread-23) Exception thrown during asynchronous load: java.util.concurrent.CompletionException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `io.cryostat.core.diagnostic.HeapDumpAnalysis` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
cryostat-1                |  at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 2]
cryostat-1                | 	at io.cryostat.diagnostic.StorageCachingHeapDumpReportsService.lambda$getStorage$0(StorageCachingHeapDumpReportsService.java:171)
cryostat-1                | 	at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.builders.UniCreateFromItemSupplier.subscribe(UniCreateFromItemSupplier.java:28)
cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.performInnerSubscription(UniOnItemTransformToUni.java:81)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.onItem(UniOnItemTransformToUni.java:57)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.builders.UniCreateFromItemSupplier.subscribe(UniCreateFromItemSupplier.java:29)
cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni.subscribe(UniOnItemTransformToUni.java:25)
cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniOnItemTransform.subscribe(UniOnItemTransform.java:22)
cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
cryostat-1                | 	at io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:51)
cryostat-1                | 	at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:110)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniSubscribeToCompletionStage.subscribe(UniSubscribeToCompletionStage.java:29)
cryostat-1                | 	at io.smallrye.mutiny.groups.UniSubscribe.asCompletionStage(UniSubscribe.java:174)
cryostat-1                | 	at io.smallrye.mutiny.Uni.subscribeAsCompletionStage(Uni.java:153)
cryostat-1                | 	at io.quarkus.cache.runtime.caffeine.CaffeineCacheImpl$4$1.apply(CaffeineCacheImpl.java:120)
cryostat-1                | 	at io.quarkus.cache.runtime.caffeine.CaffeineCacheImpl$4$1.apply(CaffeineCacheImpl.java:113)
cryostat-1                | 	at com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.lambda$computeIfAbsent$0(LocalAsyncCache.java:436)
cryostat-1                | 	at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$0(BoundedLocalCache.java:2707)
cryostat-1                | 	at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1932)
cryostat-1                | 	at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2705)
cryostat-1                | 	at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2686)
cryostat-1                | 	at com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.computeIfAbsent(LocalAsyncCache.java:435)
cryostat-1                | 	at com.github.benmanes.caffeine.cache.LocalAsyncCache$AsyncAsMapView.computeIfAbsent(LocalAsyncCache.java:362)
cryostat-1                | 	at io.quarkus.cache.runtime.caffeine.CaffeineCacheImpl$4.apply(CaffeineCacheImpl.java:112)
cryostat-1                | 	at io.quarkus.cache.runtime.caffeine.CaffeineCacheImpl$4.apply(CaffeineCacheImpl.java:106)
cryostat-1                | 	at io.smallrye.context.impl.wrappers.SlowContextualFunction.apply(SlowContextualFunction.java:21)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.builders.DeferredUniWithContext.subscribe(DeferredUniWithContext.java:25)
cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniOnItemTransform.subscribe(UniOnItemTransform.java:22)


cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
auth-1                    | 10.89.201.2:57224 - 6520b233-8482-4f06-b746-e4bfecba62f5 - user [2026/06/26 18:18:02] localhost:8443 GET cryostat "/api/beta/diagnostics/targets/utXWN_Z119CI_lGC9UXTWK9GW3ImT_zbRCJbWmb69Rw=/heapdump/quarkus-cryostat-agent18377502002859578222.tmp-b6347afa-807e-429e-9908-3beb8d75a1b1.hprof/analyze" HTTP/1.1 "Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0" 500 72 0.012
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniEmitOn.subscribe(UniEmitOn.java:22)
cryostat-1                | 	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
cryostat-1                | 	at io.smallrye.mutiny.operators.uni.UniBlockingAwait.await(UniBlockingAwait.java:61)
cryostat-1                | 	at io.smallrye.mutiny.groups.UniAwait.atMost(UniAwait.java:76)
cryostat-1                | 	at io.smallrye.mutiny.groups.UniAwait.indefinitely(UniAwait.java:50)
cryostat-1                | 	at io.cryostat.diagnostic.Diagnostics.getHeapDumpReport(Diagnostics.java:195)
cryostat-1                | 	at io.cryostat.diagnostic.Diagnostics_Subclass.getHeapDumpReport$$superforward(Unknown Source)
cryostat-1                | 	at io.cryostat.diagnostic.Diagnostics_Subclass$0.apply(Unknown Source)
cryostat-1                | 	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
cryostat-1                | 	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
cryostat-1                | 	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
cryostat-1                | 	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
cryostat-1                | 	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
cryostat-1                | 	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
cryostat-1                | 	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
cryostat-1                | 	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
cryostat-1                | 	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
cryostat-1                | 	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
cryostat-1                | 	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
cryostat-1                | 	at io.cryostat.diagnostic.Diagnostics_Subclass.getHeapDumpReport(Unknown Source)
cryostat-1                | 	at io.cryostat.diagnostic.Diagnostics$quarkusrestinvoker$getHeapDumpReport_6c8059a174c77ccdd04f054e15026ef12ea9c4e8.invoke(Unknown Source)
cryostat-1                | 	at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
cryostat-1                | 	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:190)
cryostat-1                | 	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
cryostat-1                | 	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:677)
cryostat-1                | 	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
cryostat-1                | 	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
cryostat-1                | 	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
cryostat-1                | 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
cryostat-1                | 	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
cryostat-1                | 	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
cryostat-1                | 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
cryostat-1                | 	at java.base/java.lang.Thread.run(Thread.java:1474)
cryostat-1                | Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `io.cryostat.core.diagnostic.HeapDumpAnalysis` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
cryostat-1                |  at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 2]
cryostat-1                | 	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:76)
cryostat-1                | 	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1801)
cryostat-1                | 	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1426)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1514)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:340)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
cryostat-1                | 	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:5052)
cryostat-1                | 	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3999)
cryostat-1                | 	at io.cryostat.diagnostic.StorageCachingHeapDumpReportsService.lambda$getStorage$0(StorageCachingHeapDumpReportsService.java:168)
cryostat-1                | 	... 65 more

@andrewazores

Copy link
Copy Markdown
Member

And after building the -reports PR and re-running smoketest.bash -Or -t quarkus-cryostat-agent, it looks like there's a similar serialization issue preventing the report generator's response from being serialized on the Cryostat side again:

cryostat-1                | 2026-06-26 18:22:09,866 INFO  [org.jboss.resteasy.reactive.client.logging.DefaultClientLogger] (vert.x-eventloop-thread-0) Response: POST http://reports:10001/heapdump/remote_report, Status[200 OK], Headers[transfer-encoding=chunked Content-Type=application/json;charset=UTF-8], Body:
cryostat-1                | {"problemCollections":[{"classAndField":"java.util.zip.ZipFile$ZipFileInflaterInputStream.buf (defin
cryostat-1                | 2026-06-26 18:22:09,867 WARN  [com.arjuna.ats.arjuna] (executor-thread-6) ARJUNA012095: Abort of action id 0:ffff0a59c903:a61d:6a3ec325:11d invoked while multiple threads active within it.
cryostat-1                | 2026-06-26 18:22:09,867 WARN  [com.github.benmanes.caffeine.cache.LocalAsyncCache] (executor-thread-2) Exception thrown during asynchronous load: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `io.cryostat.core.diagnostic.HeapDumpAnalysis` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
cryostat-1                |  at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 2]
cryostat-1                | 	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:76)
cryostat-1                | 	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1801)
cryostat-1                | 	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1426)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1514)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:340)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
cryostat-1                | 	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
cryostat-1                | 	at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2148)
cryostat-1                | 	at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1504)
cryostat-1                | 	at io.quarkus.rest.client.reactive.jackson.runtime.serialisers.ClientJacksonMessageBodyReader.doRead(ClientJacksonMessageBodyReader.java:59)
cryostat-1                | 	at io.quarkus.rest.client.reactive.jackson.runtime.serialisers.ClientJacksonMessageBodyReader.readFrom(ClientJacksonMessageBodyReader.java:73)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.impl.ClientReaderInterceptorContextImpl.proceed(ClientReaderInterceptorContextImpl.java:80)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.impl.ClientSerialisers.invokeClientReader(ClientSerialisers.java:157)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.impl.RestClientRequestContext.readEntity(RestClientRequestContext.java:236)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.handlers.ClientResponseCompleteRestHandler.mapToResponse(ClientResponseCompleteRestHandler.java:123)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.handlers.ClientResponseCompleteRestHandler.mapToResponse(ClientResponseCompleteRestHandler.java:44)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.handlers.ClientResponseCompleteRestHandler.handle(ClientResponseCompleteRestHandler.java:36)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.handlers.ClientResponseCompleteRestHandler.handle(ClientResponseCompleteRestHandler.java:32)
cryostat-1                | 	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.invokeHandler(AbstractResteasyReactiveContext.java:231)
cryostat-1                | 	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
cryostat-1                | 	at io.smallrye.context.impl.wrappers.SlowContextualRunnable.run(SlowContextualRunnable.java:19)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.handlers.ClientSwitchToRequestContextRestHandler$1$1.handle(ClientSwitchToRequestContextRestHandler.java:38)
cryostat-1                | 	at org.jboss.resteasy.reactive.client.handlers.ClientSwitchToRequestContextRestHandler$1$1.handle(ClientSwitchToRequestContextRestHandler.java:35)
cryostat-1                | 	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
cryostat-1                | 	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:252)
cryostat-1                | 	at io.vertx.core.impl.ContextInternal.lambda$runOnContext$0(ContextInternal.java:50)
cryostat-1                | 	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
cryostat-1                | 	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
cryostat-1                | 	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
cryostat-1                | 	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405)
cryostat-1                | 	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
cryostat-1                | 	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
cryostat-1                | 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
cryostat-1                | 	at java.base/java.lang.Thread.run(Thread.java:1474)
cryostat-1                | 


cryostat-1                | 2026-06-26 18:22:09,867 WARN  [com.arjuna.ats.arjuna] (executor-thread-6) ARJUNA012381: Action id 0:ffff0a59c903:a61d:6a3ec325:11d completed with multiple threads - thread executor-thread-6 was in progress with java.base/java.lang.Thread.getStackTrace(Thread.java:2193)
auth-1                    | 10.89.201.2:46032 - 5833e910-7fad-445d-ab4f-2bfca21c585a - user [2026/06/26 18:22:08] localhost:8443 GET cryostat "/api/beta/diagnostics/targets/xYnVrDIdBSL28OonDngyZqRTmtVbsJXd3W07n7DJAfg=/heapdump/quarkus-cryostat-agent5973808507252904685.tmp-e4626377-8484-4c09-b56c-be1c3b8aa99d.hprof/analyze" HTTP/1.1 "Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0" 500 72 1.752
cryostat-1                | com.arjuna.ats.arjuna.coordinator.BasicAction.createStackTraces(BasicAction.java:3551)
cryostat-1                | com.arjuna.ats.arjuna.coordinator.BasicAction.checkChildren(BasicAction.java:3591)
cryostat-1                | com.arjuna.ats.arjuna.coordinator.BasicAction.Abort(BasicAction.java:1724)
cryostat-1                | com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel(TwoPhaseCoordinator.java:99)
cryostat-1                | com.arjuna.ats.arjuna.AtomicAction.abort(AtomicAction.java:159)
cryostat-1                | com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.rollbackAndDisassociate(TransactionImple.java:1397)
cryostat-1                | com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.rollback(BaseTransaction.java:121)
cryostat-1                | io.quarkus.narayana.jta.runtime.NotifyingTransactionManager.rollback(NotifyingTransactionManager.java:94)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.endTransaction(TransactionalInterceptorBase.java:404)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:175)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
cryostat-1                | io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
cryostat-1                | io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
cryostat-1                | io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
cryostat-1                | io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
cryostat-1                | io.cryostat.diagnostic.Diagnostics_Subclass.getHeapDumpReport(Unknown Source)
cryostat-1                | io.cryostat.diagnostic.Diagnostics$quarkusrestinvoker$getHeapDumpReport_6c8059a174c77ccdd04f054e15026ef12ea9c4e8.invoke(Unknown Source)
cryostat-1                | org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
cryostat-1                | io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:190)
cryostat-1                | org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
cryostat-1                | io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:677)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
cryostat-1                | org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
cryostat-1                | org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
cryostat-1                | io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
cryostat-1                | java.base/java.lang.Thread.run(Thread.java:1474)
cryostat-1                | 
cryostat-1                | 2026-06-26 18:22:09,867 WARN  [com.arjuna.ats.arjuna] (executor-thread-6) ARJUNA012381: Action id 0:ffff0a59c903:a61d:6a3ec325:11d completed with multiple threads - thread executor-thread-2 was in progress with java.base/jdk.internal.misc.Unsafe.park(Native Method)
cryostat-1                | java.base/java.util.concurrent.locks.LockSupport.park(LockSupport.java:223)
cryostat-1                | java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:790)
cryostat-1                | java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1030)
cryostat-1                | java.base/java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:154)
cryostat-1                | java.base/java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:323)
cryostat-1                | com.arjuna.ats.arjuna.coordinator.BasicAction.removeChildThread(BasicAction.java:657)
cryostat-1                | com.arjuna.ats.internal.arjuna.thread.ThreadActionData.purgeActions(ThreadActionData.java:218)
cryostat-1                | com.arjuna.ats.internal.arjuna.thread.ThreadActionData.purgeActions(ThreadActionData.java:194)
cryostat-1                | com.arjuna.ats.arjuna.AtomicAction.suspend(AtomicAction.java:307)
cryostat-1                | com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple.suspend(TransactionManagerImple.java:50)
cryostat-1                | io.quarkus.narayana.jta.runtime.NotifyingTransactionManager.suspend(NotifyingTransactionManager.java:156)
cryostat-1                | io.smallrye.context.jta.context.propagation.JtaContextProvider.suspendTransaction(JtaContextProvider.java:94)
cryostat-1                | io.smallrye.context.jta.context.propagation.JtaContextProvider.lambda$currentContext$0(JtaContextProvider.java:65)
cryostat-1                | io.smallrye.context.impl.SlowActiveContextState.close(SlowActiveContextState.java:41)
cryostat-1                | io.smallrye.context.impl.wrappers.SlowContextualConsumer.accept(SlowContextualConsumer.java:22)
cryostat-1                | io.smallrye.mutiny.helpers.UniCallbackSubscriber.onFailure(UniCallbackSubscriber.java:62)
cryostat-1                | io.smallrye.mutiny.operators.uni.UniOperatorProcessor.onFailure(UniOperatorProcessor.java:55)
cryostat-1                | io.smallrye.mutiny.operators.uni.UniOperatorProcessor.onFailure(UniOperatorProcessor.java:55)
cryostat-1                | io.smallrye.mutiny.operators.uni.UniOnItemConsume$UniOnItemComsumeProcessor.onFailure(UniOnItemConsume.java:69)
cryostat-1                | io.smallrye.mutiny.operators.uni.UniEmitOn$UniEmitOnProcessor.lambda$onFailure$1(UniEmitOn.java:41)
cryostat-1                | io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:677)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
cryostat-1                | org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
cryostat-1                | org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
cryostat-1                | org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
cryostat-1                | io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
cryostat-1                | java.base/java.lang.Thread.run(Thread.java:1474)

@Josh-Matsuoka

Copy link
Copy Markdown
Contributor Author

CI failure is due to missing core, spotbugs passes locally

@Josh-Matsuoka

Copy link
Copy Markdown
Contributor Author

Pushed an update to adjust for core changes (caller is responsible for generating and cleaning up a temporary file), as well as to update the analysis endpoint to function like the reports endpoint, returning either a job ID or a json report depending on the cache state.

Spotbugs CI check failed due to core changes, passes locally

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependent feat New feature or request safe-to-test

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants