Mercurial > hg > graal-jvmci-8
comparison src/share/vm/interpreter/abstractInterpreter.hpp @ 3249:e1162778c1c8
7009266: G1: assert(obj->is_oop_or_null(true )) failed: Error
Summary: A referent object that is only weakly reachable at the start of concurrent marking but is re-attached to the strongly reachable object graph during marking may not be marked as live. This can cause the reference object to be processed prematurely and leave dangling pointers to the referent object. Implement a read barrier for the java.lang.ref.Reference::referent field by intrinsifying the Reference.get() method, and intercepting accesses though JNI, reflection, and Unsafe, so that when a non-null referent object is read it is also logged in an SATB buffer.
Reviewed-by: kvn, iveresov, never, tonyp, dholmes
author | johnc |
---|---|
date | Thu, 07 Apr 2011 09:53:20 -0700 |
parents | 8033953d67ff |
children | 3d2ab563047a |
comparison
equal
deleted
inserted
replaced
3248:e6beb62de02d | 3249:e1162778c1c8 |
---|---|
102 java_lang_math_tan, // implementation of java.lang.Math.tan (x) | 102 java_lang_math_tan, // implementation of java.lang.Math.tan (x) |
103 java_lang_math_abs, // implementation of java.lang.Math.abs (x) | 103 java_lang_math_abs, // implementation of java.lang.Math.abs (x) |
104 java_lang_math_sqrt, // implementation of java.lang.Math.sqrt (x) | 104 java_lang_math_sqrt, // implementation of java.lang.Math.sqrt (x) |
105 java_lang_math_log, // implementation of java.lang.Math.log (x) | 105 java_lang_math_log, // implementation of java.lang.Math.log (x) |
106 java_lang_math_log10, // implementation of java.lang.Math.log10 (x) | 106 java_lang_math_log10, // implementation of java.lang.Math.log10 (x) |
107 java_lang_ref_reference_get, // implementation of java.lang.ref.Reference.get() | |
107 number_of_method_entries, | 108 number_of_method_entries, |
108 invalid = -1 | 109 invalid = -1 |
109 }; | 110 }; |
110 | 111 |
111 enum SomeConstants { | 112 enum SomeConstants { |
138 | 139 |
139 | 140 |
140 // Method activation | 141 // Method activation |
141 static MethodKind method_kind(methodHandle m); | 142 static MethodKind method_kind(methodHandle m); |
142 static address entry_for_kind(MethodKind k) { assert(0 <= k && k < number_of_method_entries, "illegal kind"); return _entry_table[k]; } | 143 static address entry_for_kind(MethodKind k) { assert(0 <= k && k < number_of_method_entries, "illegal kind"); return _entry_table[k]; } |
143 static address entry_for_method(methodHandle m) { return _entry_table[method_kind(m)]; } | 144 static address entry_for_method(methodHandle m) { return entry_for_kind(method_kind(m)); } |
144 | 145 |
145 static void print_method_kind(MethodKind kind) PRODUCT_RETURN; | 146 static void print_method_kind(MethodKind kind) PRODUCT_RETURN; |
146 | 147 |
147 static bool can_be_compiled(methodHandle m); | 148 static bool can_be_compiled(methodHandle m); |
148 | 149 |