JDK-6977868 : G1: assert(!_g1->is_obj_dead(obj)) failed: We should not be preserving dead objs
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 7
  • Priority: P3
  • Status: Closed
  • Resolution: Cannot Reproduce
  • OS: solaris
  • CPU: x86
  • Submitted: 2010-08-17
  • Updated: 2013-09-18
  • Resolved: 2011-01-25
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 7
7Resolved
Related Reports
Relates :  
Relates :  
Description
Nightly test failure that has not been seen before:

gc/gctests/RememberedSet

crashes with the assert:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt/P1/B/202649.jcoomes/source/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp:3416), pid=23049, tid=11
#  assert(!_g1->is_obj_dead(obj)) failed: We should not be preserving dead objs.
#
# JRE version: 7.0

Link to the results page:

http://sqeweb.sfbay.sun.com/nfs/results/vm/gtee/JDK7/NIGHTLY/VM/2010-08-12/G1_GC_Baseline/vm/solaris-i586/server/mixed/solaris-i586_vm_server_mixed_vm.gc.testlist/analysis.html

Results Directory:

/net/sqenfs-2.sfbay/export2/results/vm/gtee/JDK7/NIGHTLY/VM/2010-08-12/G1_GC_Baseline/vm/solaris-i586/server/mixed/solaris-i586_vm_server_mixed_vm.gc.testlist

Machine: vm-conroe-02.sfbay.sun.com

Stack trace:

Current thread (0x091e8400):  VMThread [stack: 0xd4d7f000,0xd4dff000] [id=11]

Stack: [0xd4d7f000,0xd4dff000],  sp=0xd4dfd920,  free space=1fad4dff000k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x1cdf0b3];;  __1cHVMErrorGreport6MpnMoutputStream__v_+0x70b
V  [libjvm.so+0x1ce023a];;  __1cHVMErrorOreport_and_die6M_v_+0x582
V  [libjvm.so+0xab3e01];;  __1cPreport_vm_error6Fpkci11_v_+0x5ad
V  [libjvm.so+0xc21318];;  __1cYRemoveSelfPointerClosureJdo_object6MnDoop__v_+0x7b4
V  [libjvm.so+0x1a06039];;  __1cPContiguousSpaceTobject_iterate_from6MnJWaterMark_pnNObjectClosure__v_+0x61
V  [libjvm.so+0x1a05fb6];;  __1cPContiguousSpaceOobject_iterate6MpnNObjectClosure__v_+0x36
V  [libjvm.so+0xbffee9];;  __1cPG1CollectedHeapbFremove_self_forwarding_pointers6M_v_+0x139
V  [libjvm.so+0xc07088];;  __1cPG1CollectedHeapXevacuate_collection_set6M_v_+0x19f8
V  [libjvm.so+0xbfd2ce];;  __1cPG1CollectedHeapbGdo_collection_pause_at_safepoint6Md_v_+0x546
V  [libjvm.so+0x1d1ef95];;  __1cXVM_G1IncCollectionPauseEdoit6M_v_+0x10d
V  [libjvm.so+0x1d1c8dd];;  __1cMVM_OperationIevaluate6M_v_+0xe1
V  [libjvm.so+0x1d1a5f5];;  __1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_+0x145
V  [libjvm.so+0x1d1adb1];;  __1cIVMThreadEloop6M_v_+0x5c5
V  [libjvm.so+0x1d1a1d5];;  __1cIVMThreadDrun6M_v_+0xc1
V  [libjvm.so+0x17d93d8];;  java_start+0x708
C  [libc.so.1+0xa7055];;  _thr_setup+0x4e
C  [libc.so.1+0xa7340];;  _lwp_start+0x0

Comments
EVALUATION As John pointed out, the region that ends up with live objects pointing to dead objects seems to have suffered an evacuation failure earlier in the run. So, I guess there's a bug in the code that handles evacuation failure that does makes the marking information inconsistent. Either we don't prepagate marks or we do but we might not tell the concurrent market about them and it misses some live objects.
18-08-2010