comparison src/share/vm/prims/methodHandleWalk.hpp @ 2177:3582bf76420e

6990754: Use native memory and reference counting to implement SymbolTable Summary: move symbols from permgen into C heap and reference count them Reviewed-by: never, acorn, jmasa, stefank
author coleenp
date Thu, 27 Jan 2011 16:11:27 -0800
parents f2da85a9b08e
children 8033953d67ff
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
256 class ConstantValue { 256 class ConstantValue {
257 private: 257 private:
258 int _tag; // Constant pool tag type. 258 int _tag; // Constant pool tag type.
259 JavaValue _value; 259 JavaValue _value;
260 Handle _handle; 260 Handle _handle;
261 Symbol* _sym;
261 262
262 public: 263 public:
263 // Constructor for oop types. 264 // Constructor for oop types.
264 ConstantValue(int tag, Handle con) : _tag(tag), _handle(con) { 265 ConstantValue(int tag, Handle con) : _tag(tag), _handle(con) {
265 assert(tag == JVM_CONSTANT_Utf8 || 266 assert(tag == JVM_CONSTANT_Class ||
266 tag == JVM_CONSTANT_Class ||
267 tag == JVM_CONSTANT_String || 267 tag == JVM_CONSTANT_String ||
268 tag == JVM_CONSTANT_Object, "must be oop type"); 268 tag == JVM_CONSTANT_Object, "must be oop type");
269 }
270
271 ConstantValue(int tag, Symbol* con) : _tag(tag), _sym(con) {
272 assert(tag == JVM_CONSTANT_Utf8, "must be symbol type");
269 } 273 }
270 274
271 // Constructor for oop reference types. 275 // Constructor for oop reference types.
272 ConstantValue(int tag, int index) : _tag(tag) { 276 ConstantValue(int tag, int index) : _tag(tag) {
273 assert(JVM_CONSTANT_Fieldref <= tag && tag <= JVM_CONSTANT_NameAndType, "must be ref type"); 277 assert(JVM_CONSTANT_Fieldref <= tag && tag <= JVM_CONSTANT_NameAndType, "must be ref type");
289 default: ShouldNotReachHere(); 293 default: ShouldNotReachHere();
290 } 294 }
291 } 295 }
292 296
293 int tag() const { return _tag; } 297 int tag() const { return _tag; }
294 symbolOop symbol_oop() const { return (symbolOop) _handle(); } 298 Symbol* symbol() const { return _sym; }
295 klassOop klass_oop() const { return (klassOop) _handle(); } 299 klassOop klass_oop() const { return (klassOop) _handle(); }
296 oop object_oop() const { return _handle(); } 300 oop object_oop() const { return _handle(); }
297 int index() const { return _value.get_jint(); } 301 int index() const { return _value.get_jint(); }
298 int first_index() const { return _value.get_jint() >> 16; } 302 int first_index() const { return _value.get_jint() >> 16; }
299 int second_index() const { return _value.get_jint() & 0x0000FFFF; } 303 int second_index() const { return _value.get_jint() & 0x0000FFFF; }
334 if (con.is_null()) return 0; 338 if (con.is_null()) return 0;
335 ConstantValue* cv = new ConstantValue(tag, con); 339 ConstantValue* cv = new ConstantValue(tag, con);
336 return _constants.append(cv); 340 return _constants.append(cv);
337 } 341 }
338 342
343 int cpool_symbol_put(int tag, Symbol* con) {
344 if (con == NULL) return 0;
345 ConstantValue* cv = new ConstantValue(tag, con);
346 return _constants.append(cv);
347 }
348
339 int cpool_oop_reference_put(int tag, int first_index, int second_index) { 349 int cpool_oop_reference_put(int tag, int first_index, int second_index) {
340 if (first_index == 0 && second_index == 0) return 0; 350 if (first_index == 0 && second_index == 0) return 0;
341 assert(first_index != 0 && second_index != 0, "no zero indexes"); 351 assert(first_index != 0 && second_index != 0, "no zero indexes");
342 ConstantValue* cv = new ConstantValue(tag, first_index, second_index); 352 ConstantValue* cv = new ConstantValue(tag, first_index, second_index);
343 return _constants.append(cv); 353 return _constants.append(cv);
363 } 373 }
364 374
365 int cpool_object_put(Handle obj) { 375 int cpool_object_put(Handle obj) {
366 return cpool_oop_put(JVM_CONSTANT_Object, obj); 376 return cpool_oop_put(JVM_CONSTANT_Object, obj);
367 } 377 }
368 int cpool_symbol_put(symbolOop sym) { 378 int cpool_symbol_put(Symbol* sym) {
369 return cpool_oop_put(JVM_CONSTANT_Utf8, sym); 379 return cpool_symbol_put(JVM_CONSTANT_Utf8, sym);
370 } 380 }
371 int cpool_klass_put(klassOop klass) { 381 int cpool_klass_put(klassOop klass) {
372 return cpool_oop_put(JVM_CONSTANT_Class, klass); 382 return cpool_oop_put(JVM_CONSTANT_Class, klass);
373 } 383 }
374 int cpool_methodref_put(int class_index, int name_and_type_index) { 384 int cpool_methodref_put(int class_index, int name_and_type_index) {