124 125 public: 126 InterpreterOopMap(); 127 ~InterpreterOopMap(); 128 129 // Copy the OopMapCacheEntry in parameter "from" into this 130 // InterpreterOopMap. If the _bit_mask[0] in "from" points to 131 // allocated space (i.e., the bit mask was to large to hold 132 // in-line), allocate the space from a Resource area. 133 void resource_copy(OopMapCacheEntry* from); 134 135 void iterate_oop(OffsetClosure* oop_closure) const; 136 void print() const; 137 138 int number_of_entries() const { return mask_size() / bits_per_entry; } 139 bool is_dead(int offset) const { return (entry_at(offset) & (1 << dead_bit_number)) != 0; } 140 bool is_oop (int offset) const { return (entry_at(offset) & (1 << oop_bit_number )) != 0; } 141 142 int expression_stack_size() const { return _expression_stack_size; } 143 144 #ifdef ENABLE_ZAP_DEAD_LOCALS 145 void iterate_all(OffsetClosure* oop_closure, OffsetClosure* value_closure, OffsetClosure* dead_closure); 146 #endif 147 }; 148 149 class OopMapCache : public CHeapObj<mtClass> { 150 private: 151 enum { _size = 32, // Use fixed size for now 152 _probe_depth = 3 // probe depth in case of collisions 153 }; 154 155 OopMapCacheEntry* _array; 156 157 unsigned int hash_value_for(methodHandle method, int bci) const; 158 OopMapCacheEntry* entry_at(int i) const; 159 160 mutable Mutex _mut; 161 162 void flush(); 163 164 public: 165 OopMapCache(); 166 ~OopMapCache(); // free up memory | 124 125 public: 126 InterpreterOopMap(); 127 ~InterpreterOopMap(); 128 129 // Copy the OopMapCacheEntry in parameter "from" into this 130 // InterpreterOopMap. If the _bit_mask[0] in "from" points to 131 // allocated space (i.e., the bit mask was to large to hold 132 // in-line), allocate the space from a Resource area. 133 void resource_copy(OopMapCacheEntry* from); 134 135 void iterate_oop(OffsetClosure* oop_closure) const; 136 void print() const; 137 138 int number_of_entries() const { return mask_size() / bits_per_entry; } 139 bool is_dead(int offset) const { return (entry_at(offset) & (1 << dead_bit_number)) != 0; } 140 bool is_oop (int offset) const { return (entry_at(offset) & (1 << oop_bit_number )) != 0; } 141 142 int expression_stack_size() const { return _expression_stack_size; } 143 144 }; 145 146 class OopMapCache : public CHeapObj<mtClass> { 147 private: 148 enum { _size = 32, // Use fixed size for now 149 _probe_depth = 3 // probe depth in case of collisions 150 }; 151 152 OopMapCacheEntry* _array; 153 154 unsigned int hash_value_for(methodHandle method, int bci) const; 155 OopMapCacheEntry* entry_at(int i) const; 156 157 mutable Mutex _mut; 158 159 void flush(); 160 161 public: 162 OopMapCache(); 163 ~OopMapCache(); // free up memory |