Mercurial > hg > truffle
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); |