42 } 43 44 ResolvedMethodEntry** next_addr() { 45 return (ResolvedMethodEntry**)HashtableEntry<ClassLoaderWeakHandle, mtClass>::next_addr(); 46 } 47 48 oop object(); 49 oop object_no_keepalive(); 50 51 void print_on(outputStream* st) const; 52 }; 53 54 class ResolvedMethodTable : public Hashtable<ClassLoaderWeakHandle, mtClass> { 55 enum Constants { 56 _table_size = 1007 57 }; 58 59 static int _oops_removed; 60 static int _oops_counted; 61 62 static ResolvedMethodTable* _the_table; 63 private: 64 ResolvedMethodEntry* bucket(int i) { 65 return (ResolvedMethodEntry*) Hashtable<ClassLoaderWeakHandle, mtClass>::bucket(i); 66 } 67 68 ResolvedMethodEntry** bucket_addr(int i) { 69 return (ResolvedMethodEntry**) Hashtable<ClassLoaderWeakHandle, mtClass>::bucket_addr(i); 70 } 71 72 unsigned int compute_hash(Method* method); 73 74 // need not be locked; no state change 75 oop lookup(int index, unsigned int hash, Method* method); 76 oop lookup(Method* method); 77 78 // must be done under ResolvedMethodTable_lock 79 oop basic_add(Method* method, Handle rmethod_name); 80 81 public: 82 ResolvedMethodTable(); 83 84 static void create_table() { 85 assert(_the_table == NULL, "One symbol table allowed."); 86 _the_table = new ResolvedMethodTable(); 87 } 88 89 // Called from java_lang_invoke_ResolvedMethodName 90 static oop find_method(Method* method); 91 static oop add_method(Handle rmethod_name); 92 93 #if INCLUDE_JVMTI 94 // It is called at safepoint only for RedefineClasses 95 static void adjust_method_entries(bool * trace_name_printed); 96 #endif // INCLUDE_JVMTI 97 98 // Cleanup cleared entries 99 static void unlink(); 100 101 #ifndef PRODUCT 102 void print(); 103 #endif 104 void verify(); 105 }; 106 107 #endif // SHARE_VM_PRIMS_RESOLVEDMETHOD_HPP | 42 } 43 44 ResolvedMethodEntry** next_addr() { 45 return (ResolvedMethodEntry**)HashtableEntry<ClassLoaderWeakHandle, mtClass>::next_addr(); 46 } 47 48 oop object(); 49 oop object_no_keepalive(); 50 51 void print_on(outputStream* st) const; 52 }; 53 54 class ResolvedMethodTable : public Hashtable<ClassLoaderWeakHandle, mtClass> { 55 enum Constants { 56 _table_size = 1007 57 }; 58 59 static int _oops_removed; 60 static int _oops_counted; 61 62 static bool _dead_entries; 63 64 static ResolvedMethodTable* _the_table; 65 private: 66 ResolvedMethodEntry* bucket(int i) { 67 return (ResolvedMethodEntry*) Hashtable<ClassLoaderWeakHandle, mtClass>::bucket(i); 68 } 69 70 ResolvedMethodEntry** bucket_addr(int i) { 71 return (ResolvedMethodEntry**) Hashtable<ClassLoaderWeakHandle, mtClass>::bucket_addr(i); 72 } 73 74 unsigned int compute_hash(Method* method); 75 76 // need not be locked; no state change 77 oop lookup(int index, unsigned int hash, Method* method); 78 oop lookup(Method* method); 79 80 // must be done under ResolvedMethodTable_lock 81 oop basic_add(Method* method, Handle rmethod_name); 82 83 public: 84 ResolvedMethodTable(); 85 86 static void create_table() { 87 assert(_the_table == NULL, "One symbol table allowed."); 88 _the_table = new ResolvedMethodTable(); 89 } 90 91 // Called from java_lang_invoke_ResolvedMethodName 92 static oop find_method(Method* method); 93 static oop add_method(Handle rmethod_name); 94 95 static bool has_work() { return _dead_entries; } 96 static void trigger_cleanup(); 97 98 #if INCLUDE_JVMTI 99 // It is called at safepoint only for RedefineClasses 100 static void adjust_method_entries(bool * trace_name_printed); 101 #endif // INCLUDE_JVMTI 102 103 // Cleanup cleared entries 104 static void unlink(); 105 106 #ifndef PRODUCT 107 void print(); 108 #endif 109 void verify(); 110 }; 111 112 #endif // SHARE_VM_PRIMS_RESOLVEDMETHOD_HPP |