comparison src/share/vm/interpreter/abstractInterpreter.hpp @ 2346: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
10:f83dd4a226bc 11:aa6127cec0a2
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