comparison src/share/vm/oops/klass.cpp @ 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 f95d63e2154a
children d25d4ca69222 38fea01eb669
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
33 #include "oops/klassOop.hpp" 33 #include "oops/klassOop.hpp"
34 #include "oops/oop.inline.hpp" 34 #include "oops/oop.inline.hpp"
35 #include "oops/oop.inline2.hpp" 35 #include "oops/oop.inline2.hpp"
36 #include "runtime/atomic.hpp" 36 #include "runtime/atomic.hpp"
37 37
38 void Klass::set_name(Symbol* n) {
39 _name = n;
40 if (_name != NULL) _name->increment_refcount();
41 }
38 42
39 bool Klass::is_subclass_of(klassOop k) const { 43 bool Klass::is_subclass_of(klassOop k) const {
40 // Run up the super chain and check 44 // Run up the super chain and check
41 klassOop t = as_klassOop(); 45 klassOop t = as_klassOop();
42 46
113 assert(k->is_klass(), "argument must be a class"); 117 assert(k->is_klass(), "argument must be a class");
114 return is_subclass_of(k); 118 return is_subclass_of(k);
115 } 119 }
116 120
117 121
118 methodOop Klass::uncached_lookup_method(symbolOop name, symbolOop signature) const { 122 methodOop Klass::uncached_lookup_method(Symbol* name, Symbol* signature) const {
119 #ifdef ASSERT 123 #ifdef ASSERT
120 tty->print_cr("Error: uncached_lookup_method called on a klass oop." 124 tty->print_cr("Error: uncached_lookup_method called on a klass oop."
121 " Likely error: reflection method does not correctly" 125 " Likely error: reflection method does not correctly"
122 " wrap return value in a mirror object."); 126 " wrap return value in a mirror object.");
123 #endif 127 #endif
452 set_subklass(NULL); 456 set_subklass(NULL);
453 set_next_sibling(NULL); 457 set_next_sibling(NULL);
454 } 458 }
455 459
456 460
461 void Klass::shared_symbols_iterate(SymbolClosure* closure) {
462 closure->do_symbol(&_name);
463 }
464
465
457 klassOop Klass::array_klass_or_null(int rank) { 466 klassOop Klass::array_klass_or_null(int rank) {
458 EXCEPTION_MARK; 467 EXCEPTION_MARK;
459 // No exception can be thrown by array_klass_impl when called with or_null == true. 468 // No exception can be thrown by array_klass_impl when called with or_null == true.
460 // (In anycase, the execption mark will fail if it do so) 469 // (In anycase, the execption mark will fail if it do so)
461 return array_klass_impl(true, rank, THREAD); 470 return array_klass_impl(true, rank, THREAD);