United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7041440 G1: assert(obj->is_oop_or_null(true )) failed: Error #
JDK-7041440 : G1: assert(obj->is_oop_or_null(true )) failed: Error #

Details
Type:
Bug
Submit Date:
2011-05-03
Status:
Closed
Updated Date:
2011-08-02
Project Name:
JDK
Resolved Date:
2011-07-18
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
hs21
Fixed Versions:
hs21 (b14)

Related Reports
Backport:
Backport:
Backport:

Sub Tasks

Description
Saw this failure during 20110430 nightly testing.

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt/P1/B/192840.iv159533/source/src/share/vm/gc_implementation/g1/concurrentMark.cpp:3409), pid=19698, tid=33
#  assert(obj->is_oop_or_null(true )) failed: Error

                                    

Comments
SUGGESTED FIX

The solution is, during an evacuation pause, to scan the local fingers of the concurrent marking tasks. If we find local finger that points into the collection set then we need to have the concurrent mark task give up that claimed region as the values in the region fields will become stale. This will cause the concurrent mark task to claim a new region when marking restarts after the pause.
                                     
2011-05-17
EVALUATION

Region that was originally a survivor regions that was currently claimed by a marking task was subsequently evacuation during the next GC. During a later GC pause the region was used as old gc alloc region. When marking restarted the local finger of the task that had claimed this region was to NTAMS (the same value as top) effectively skipping the scanning a portion of this region.
                                     
2011-05-17
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/69293e516993
                                     
2011-05-17



Hardware and Software, Engineered to Work Together