comparison src/share/vm/memory/universe.hpp @ 12022:85147f28faba

8009728: nsk/jvmti/AttachOnDemand/attach030 crashes on Win32 Summary: ActiveMethodOopsCache was used to keep track of old versions of some methods that are cached in Universe but is buggy with permgen removal and not needed anymore Reviewed-by: sspitsyn, dcubed, mseledtsov
author coleenp
date Mon, 12 Aug 2013 17:24:54 -0400
parents cedf20e2a655
children 740e263c80c6
comparison
equal deleted inserted replaced
12021:bd0e82136b03 12022:85147f28faba
39 39
40 class CollectedHeap; 40 class CollectedHeap;
41 class DeferredObjAllocEvent; 41 class DeferredObjAllocEvent;
42 42
43 43
44 // Common parts of a Method* cache. This cache safely interacts with 44 // A helper class for caching a Method* when the user of the cache
45 // the RedefineClasses API. 45 // only cares about the latest version of the Method*. This cache safely
46 // 46 // interacts with the RedefineClasses API.
47 class CommonMethodOopCache : public CHeapObj<mtClass> { 47
48 class LatestMethodCache : public CHeapObj<mtClass> {
48 // We save the Klass* and the idnum of Method* in order to get 49 // We save the Klass* and the idnum of Method* in order to get
49 // the current cached Method*. 50 // the current cached Method*.
50 private: 51 private:
51 Klass* _klass; 52 Klass* _klass;
52 int _method_idnum; 53 int _method_idnum;
53 54
54 public: 55 public:
55 CommonMethodOopCache() { _klass = NULL; _method_idnum = -1; } 56 LatestMethodCache() { _klass = NULL; _method_idnum = -1; }
56 ~CommonMethodOopCache() { _klass = NULL; _method_idnum = -1; } 57 ~LatestMethodCache() { _klass = NULL; _method_idnum = -1; }
57 58
58 void init(Klass* k, Method* m, TRAPS); 59 void init(Klass* k, Method* m);
59 Klass* klass() const { return _klass; } 60 Klass* klass() const { return _klass; }
60 int method_idnum() const { return _method_idnum; } 61 int method_idnum() const { return _method_idnum; }
62
63 Method* get_method();
61 64
62 // Enhanced Class Redefinition support 65 // Enhanced Class Redefinition support
63 void classes_do(void f(Klass*)) { 66 void classes_do(void f(Klass*)) {
64 f(_klass); 67 f(_klass);
65 } 68 }
69 void serialize(SerializeClosure* f) { 72 void serialize(SerializeClosure* f) {
70 f->do_ptr((void**)&_klass); 73 f->do_ptr((void**)&_klass);
71 } 74 }
72 }; 75 };
73 76
74
75 // A helper class for caching a Method* when the user of the cache
76 // cares about all versions of the Method*.
77 //
78 class ActiveMethodOopsCache : public CommonMethodOopCache {
79 // This subclass adds weak references to older versions of the
80 // Method* and a query method for a Method*.
81
82 private:
83 // If the cached Method* has not been redefined, then
84 // _prev_methods will be NULL. If all of the previous
85 // versions of the method have been collected, then
86 // _prev_methods can have a length of zero.
87 GrowableArray<Method*>* _prev_methods;
88
89 public:
90 ActiveMethodOopsCache() { _prev_methods = NULL; }
91 ~ActiveMethodOopsCache();
92
93 void add_previous_version(Method* method);
94 bool is_same_method(const Method* method) const;
95 };
96
97
98 // A helper class for caching a Method* when the user of the cache
99 // only cares about the latest version of the Method*.
100 //
101 class LatestMethodOopCache : public CommonMethodOopCache {
102 // This subclass adds a getter method for the latest Method*.
103
104 public:
105 Method* get_Method();
106 };
107 77
108 // For UseCompressedOops and UseCompressedKlassPointers. 78 // For UseCompressedOops and UseCompressedKlassPointers.
109 struct NarrowPtrStruct { 79 struct NarrowPtrStruct {
110 // Base address for oop/klass-within-java-object materialization. 80 // Base address for oop/klass-within-java-object materialization.
111 // NULL if using wide oops/klasses or zero based narrow oops/klasses. 81 // NULL if using wide oops/klasses or zero based narrow oops/klasses.
172 static oop _system_thread_group; // Reference to the system thread group object 142 static oop _system_thread_group; // Reference to the system thread group object
173 143
174 static objArrayOop _the_empty_class_klass_array; // Canonicalized obj array of type java.lang.Class 144 static objArrayOop _the_empty_class_klass_array; // Canonicalized obj array of type java.lang.Class
175 static oop _the_null_string; // A cache of "null" as a Java string 145 static oop _the_null_string; // A cache of "null" as a Java string
176 static oop _the_min_jint_string; // A cache of "-2147483648" as a Java string 146 static oop _the_min_jint_string; // A cache of "-2147483648" as a Java string
177 static LatestMethodOopCache* _finalizer_register_cache; // static method for registering finalizable objects 147 static LatestMethodCache* _finalizer_register_cache; // static method for registering finalizable objects
178 static LatestMethodOopCache* _loader_addClass_cache; // method for registering loaded classes in class loader vector 148 static LatestMethodCache* _loader_addClass_cache; // method for registering loaded classes in class loader vector
179 static LatestMethodOopCache* _pd_implies_cache; // method for checking protection domain attributes 149 static LatestMethodCache* _pd_implies_cache; // method for checking protection domain attributes
180 static ActiveMethodOopsCache* _reflect_invoke_cache; // method for security checks 150
181 // preallocated error objects (no backtrace) 151 // preallocated error objects (no backtrace)
182 static oop _out_of_memory_error_java_heap; 152 static oop _out_of_memory_error_java_heap;
183 static oop _out_of_memory_error_metaspace; 153 static oop _out_of_memory_error_metaspace;
184 static oop _out_of_memory_error_class_metaspace; 154 static oop _out_of_memory_error_class_metaspace;
185 static oop _out_of_memory_error_array_size; 155 static oop _out_of_memory_error_array_size;
332 302
333 static objArrayOop the_empty_class_klass_array () { return _the_empty_class_klass_array; } 303 static objArrayOop the_empty_class_klass_array () { return _the_empty_class_klass_array; }
334 static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array; } 304 static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array; }
335 static oop the_null_string() { return _the_null_string; } 305 static oop the_null_string() { return _the_null_string; }
336 static oop the_min_jint_string() { return _the_min_jint_string; } 306 static oop the_min_jint_string() { return _the_min_jint_string; }
337 static Method* finalizer_register_method() { return _finalizer_register_cache->get_Method(); } 307
338 static Method* loader_addClass_method() { return _loader_addClass_cache->get_Method(); } 308 static Method* finalizer_register_method() { return _finalizer_register_cache->get_method(); }
339 309 static Method* loader_addClass_method() { return _loader_addClass_cache->get_method(); }
340 static Method* protection_domain_implies_method() { return _pd_implies_cache->get_Method(); } 310
341 static ActiveMethodOopsCache* reflect_invoke_cache() { return _reflect_invoke_cache; } 311 static Method* protection_domain_implies_method() { return _pd_implies_cache->get_method(); }
342 312
343 static oop null_ptr_exception_instance() { return _null_ptr_exception_instance; } 313 static oop null_ptr_exception_instance() { return _null_ptr_exception_instance; }
344 static oop arithmetic_exception_instance() { return _arithmetic_exception_instance; } 314 static oop arithmetic_exception_instance() { return _arithmetic_exception_instance; }
345 static oop virtual_machine_error_instance() { return _virtual_machine_error_instance; } 315 static oop virtual_machine_error_instance() { return _virtual_machine_error_instance; }
346 static oop vm_exception() { return _vm_exception; } 316 static oop vm_exception() { return _vm_exception; }