JDK-6822263 : G1: JVMTI heap iteration fails
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: hs14
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2009-03-25
  • Updated: 2013-09-18
  • Resolved: 2011-03-08
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7 Other
6u18Fixed 7Fixed hs15Fixed
JVM fails guarantee with a G1 collector after going through a JVMTI heap iteration with a subsequent full GC:

#  Internal Error (/tmp/jprt/P1/B/025853.ap31282/source/src/share/vm/classfile/dictionary.cpp:262), pid=3474, tid=9
#  Error: guarantee(!is_alive->do_object_b(k_def_class_loader),"defining loader should not be live if klass is not")

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/4ac7d97e6101

EVALUATION JVMTI reachable objects iteration functions use a call to object_iterate() to clean the marking bits of the objects (it uses marking bits to track the vertices of the object graph that it visits). The semantics of the object_iterate() include iteration over the perm gen. However G1 doesn't do that. The fix is to include the perm gen objects in the iterable set.