Mercurial > hg > graal-compiler
diff src/share/vm/oops/methodOop.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 | 8012aa3ccede |
children | c5a923563727 15d6977f04b0 173926398291 |
line wrap: on
line diff
--- a/src/share/vm/oops/methodOop.cpp Thu Jan 27 13:42:28 2011 -0800 +++ b/src/share/vm/oops/methodOop.cpp Thu Jan 27 16:11:27 2011 -0800 @@ -38,7 +38,7 @@ #include "oops/methodDataOop.hpp" #include "oops/methodOop.hpp" #include "oops/oop.inline.hpp" -#include "oops/symbolOop.hpp" +#include "oops/symbol.hpp" #include "prims/jvmtiExport.hpp" #include "prims/methodHandleWalk.hpp" #include "prims/nativeLookup.hpp" @@ -77,7 +77,7 @@ return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature(), buf, size); } -char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, symbolOop method_name, symbolOop signature) { +char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature) { const char* klass_name = klass->external_name(); int klass_name_len = (int)strlen(klass_name); int method_name_len = method_name->utf8_length(); @@ -91,8 +91,8 @@ return dest; } -char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, symbolOop method_name, symbolOop signature, char* buf, int size) { - symbolOop klass_name = klass->name(); +char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature, char* buf, int size) { + Symbol* klass_name = klass->name(); klass_name->as_klass_external_name(buf, size); int len = (int)strlen(buf); @@ -221,7 +221,7 @@ } -symbolOop methodOopDesc::klass_name() const { +Symbol* methodOopDesc::klass_name() const { klassOop k = method_holder(); assert(k->is_klass(), "must be klass"); instanceKlass* ik = (instanceKlass*) k->klass_part(); @@ -333,8 +333,7 @@ void methodOopDesc::compute_size_of_parameters(Thread *thread) { - symbolHandle h_signature(thread, signature()); - ArgumentSizeComputer asc(h_signature); + ArgumentSizeComputer asc(signature()); set_size_of_parameters(asc.size() + (is_static() ? 0 : 1)); } @@ -520,7 +519,7 @@ bool methodOopDesc::is_klass_loaded_by_klass_index(int klass_index) const { if( _constants->tag_at(klass_index).is_unresolved_klass() ) { Thread *thread = Thread::current(); - symbolHandle klass_name(thread, _constants->klass_name_at(klass_index)); + Symbol* klass_name = _constants->klass_name_at(klass_index); Handle loader(thread, instanceKlass::cast(method_holder())->class_loader()); Handle prot (thread, Klass::cast(method_holder())->protection_domain()); return SystemDictionary::find(klass_name, loader, prot, thread) != NULL; @@ -852,7 +851,7 @@ // Constant pool structure for invoke methods: enum { _imcp_invoke_name = 1, // utf8: 'invokeExact' or 'invokeGeneric' - _imcp_invoke_signature, // utf8: (variable symbolOop) + _imcp_invoke_signature, // utf8: (variable Symbol*) _imcp_method_type_value, // string: (variable java/dyn/MethodType, sic) _imcp_limit }; @@ -895,8 +894,8 @@ } methodHandle methodOopDesc::make_invoke_method(KlassHandle holder, - symbolHandle name, - symbolHandle signature, + Symbol* name, + Symbol* signature, Handle method_type, TRAPS) { methodHandle empty; @@ -914,9 +913,9 @@ constantPoolOop cp_oop = oopFactory::new_constantPool(_imcp_limit, IsSafeConc, CHECK_(empty)); cp = constantPoolHandle(THREAD, cp_oop); } - cp->symbol_at_put(_imcp_invoke_name, name()); - cp->symbol_at_put(_imcp_invoke_signature, signature()); - cp->string_at_put(_imcp_method_type_value, vmSymbols::void_signature()); + cp->symbol_at_put(_imcp_invoke_name, name); + cp->symbol_at_put(_imcp_invoke_signature, signature); + cp->string_at_put(_imcp_method_type_value, Universe::the_null_string()); cp->set_pool_holder(holder()); // set up the fancy stuff: @@ -932,7 +931,7 @@ m->set_name_index(_imcp_invoke_name); m->set_signature_index(_imcp_invoke_signature); assert(is_method_handle_invoke_name(m->name()), ""); - assert(m->signature() == signature(), ""); + assert(m->signature() == signature, ""); assert(m->is_method_handle_invoke(), ""); #ifdef CC_INTERP ResultTypeFinder rtf(signature()); @@ -1047,7 +1046,7 @@ return vmSymbols::NO_SID; // regardless of name, no intrinsics here // see if the klass name is well-known: - symbolOop klass_name = instanceKlass::cast(holder)->name(); + Symbol* klass_name = instanceKlass::cast(holder)->name(); return vmSymbols::find_sid(klass_name); } @@ -1123,11 +1122,12 @@ bool sig_is_loaded = true; Handle class_loader(THREAD, instanceKlass::cast(m->method_holder())->class_loader()); Handle protection_domain(THREAD, Klass::cast(m->method_holder())->protection_domain()); - symbolHandle signature(THREAD, m->signature()); + ResourceMark rm(THREAD); + Symbol* signature = m->signature(); for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { if (ss.is_object()) { - symbolOop sym = ss.as_symbol(CHECK_(false)); - symbolHandle name (THREAD, sym); + Symbol* sym = ss.as_symbol(CHECK_(false)); + Symbol* name = sym; klassOop klass = SystemDictionary::resolve_or_null(name, class_loader, protection_domain, THREAD); // We are loading classes eagerly. If a ClassNotFoundException or @@ -1149,11 +1149,12 @@ bool methodOopDesc::has_unloaded_classes_in_signature(methodHandle m, TRAPS) { Handle class_loader(THREAD, instanceKlass::cast(m->method_holder())->class_loader()); Handle protection_domain(THREAD, Klass::cast(m->method_holder())->protection_domain()); - symbolHandle signature(THREAD, m->signature()); + ResourceMark rm(THREAD); + Symbol* signature = m->signature(); for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { if (ss.type() == T_OBJECT) { - symbolHandle name(THREAD, ss.as_symbol_or_null()); - if (name() == NULL) return true; + Symbol* name = ss.as_symbol_or_null(); + if (name == NULL) return true; klassOop klass = SystemDictionary::find(name, class_loader, protection_domain, THREAD); if (klass == NULL) return true; } @@ -1317,7 +1318,7 @@ } public: - SignatureTypePrinter(symbolHandle signature, outputStream* st) : SignatureTypeNames(signature) { + SignatureTypePrinter(Symbol* signature, outputStream* st) : SignatureTypeNames(signature) { _st = st; _use_separator = false; }