Mercurial > hg > graal-compiler
comparison src/share/vm/prims/jvmtiEnv.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 | b1a2afa37ec4 |
children | fcc932c8238c |
comparison
equal
deleted
inserted
replaced
2176:27e4ea99855d | 2177:3582bf76420e |
---|---|
539 { | 539 { |
540 JavaValue res(T_VOID); | 540 JavaValue res(T_VOID); |
541 JavaCalls::call_special(&res, | 541 JavaCalls::call_special(&res, |
542 loader, | 542 loader, |
543 loader_ik, | 543 loader_ik, |
544 vmSymbolHandles::appendToClassPathForInstrumentation_name(), | 544 vmSymbols::appendToClassPathForInstrumentation_name(), |
545 vmSymbolHandles::appendToClassPathForInstrumentation_signature(), | 545 vmSymbols::appendToClassPathForInstrumentation_signature(), |
546 path, | 546 path, |
547 THREAD); | 547 THREAD); |
548 if (HAS_PENDING_EXCEPTION) { | 548 if (HAS_PENDING_EXCEPTION) { |
549 symbolOop ex_name = PENDING_EXCEPTION->klass()->klass_part()->name(); | 549 Symbol* ex_name = PENDING_EXCEPTION->klass()->klass_part()->name(); |
550 CLEAR_PENDING_EXCEPTION; | 550 CLEAR_PENDING_EXCEPTION; |
551 | 551 |
552 if (ex_name == vmSymbols::java_lang_NoSuchMethodError()) { | 552 if (ex_name == vmSymbols::java_lang_NoSuchMethodError()) { |
553 return JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED; | 553 return JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED; |
554 } else { | 554 } else { |
2122 *signature_ptr = result; | 2122 *signature_ptr = result; |
2123 } | 2123 } |
2124 if (generic_ptr != NULL) { | 2124 if (generic_ptr != NULL) { |
2125 *generic_ptr = NULL; | 2125 *generic_ptr = NULL; |
2126 if (!isPrimitive && Klass::cast(k)->oop_is_instance()) { | 2126 if (!isPrimitive && Klass::cast(k)->oop_is_instance()) { |
2127 symbolOop soo = instanceKlass::cast(k)->generic_signature(); | 2127 Symbol* soo = instanceKlass::cast(k)->generic_signature(); |
2128 if (soo != NULL) { | 2128 if (soo != NULL) { |
2129 const char *gen_sig = soo->as_C_string(); | 2129 const char *gen_sig = soo->as_C_string(); |
2130 if (gen_sig != NULL) { | 2130 if (gen_sig != NULL) { |
2131 char* gen_result; | 2131 char* gen_result; |
2132 jvmtiError err = allocate(strlen(gen_sig) + 1, | 2132 jvmtiError err = allocate(strlen(gen_sig) + 1, |
2174 | 2174 |
2175 if (!Klass::cast(k_klass)->oop_is_instance()) { | 2175 if (!Klass::cast(k_klass)->oop_is_instance()) { |
2176 return JVMTI_ERROR_ABSENT_INFORMATION; | 2176 return JVMTI_ERROR_ABSENT_INFORMATION; |
2177 } | 2177 } |
2178 | 2178 |
2179 symbolOop sfnOop = instanceKlass::cast(k_klass)->source_file_name(); | 2179 Symbol* sfnOop = instanceKlass::cast(k_klass)->source_file_name(); |
2180 NULL_CHECK(sfnOop, JVMTI_ERROR_ABSENT_INFORMATION); | 2180 NULL_CHECK(sfnOop, JVMTI_ERROR_ABSENT_INFORMATION); |
2181 { | 2181 { |
2182 JavaThread* current_thread = JavaThread::current(); | 2182 JavaThread* current_thread = JavaThread::current(); |
2183 ResourceMark rm(current_thread); | 2183 ResourceMark rm(current_thread); |
2184 const char* sfncp = (const char*) sfnOop->as_C_string(); | 2184 const char* sfncp = (const char*) sfnOop->as_C_string(); |
2537 klassOop k = java_lang_Class::as_klassOop(k_mirror); | 2537 klassOop k = java_lang_Class::as_klassOop(k_mirror); |
2538 NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS); | 2538 NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS); |
2539 if (!Klass::cast(k)->oop_is_instance()) { | 2539 if (!Klass::cast(k)->oop_is_instance()) { |
2540 return JVMTI_ERROR_ABSENT_INFORMATION; | 2540 return JVMTI_ERROR_ABSENT_INFORMATION; |
2541 } | 2541 } |
2542 symbolOop sdeOop = instanceKlass::cast(k)->source_debug_extension(); | 2542 Symbol* sdeOop = instanceKlass::cast(k)->source_debug_extension(); |
2543 NULL_CHECK(sdeOop, JVMTI_ERROR_ABSENT_INFORMATION); | 2543 NULL_CHECK(sdeOop, JVMTI_ERROR_ABSENT_INFORMATION); |
2544 | 2544 |
2545 { | 2545 { |
2546 JavaThread* current_thread = JavaThread::current(); | 2546 JavaThread* current_thread = JavaThread::current(); |
2547 ResourceMark rm(current_thread); | 2547 ResourceMark rm(current_thread); |
2617 return JVMTI_ERROR_OUT_OF_MEMORY; | 2617 return JVMTI_ERROR_OUT_OF_MEMORY; |
2618 strcpy(*signature_ptr, fieldSignature); | 2618 strcpy(*signature_ptr, fieldSignature); |
2619 } | 2619 } |
2620 if (generic_ptr != NULL) { | 2620 if (generic_ptr != NULL) { |
2621 *generic_ptr = NULL; | 2621 *generic_ptr = NULL; |
2622 symbolOop soop = fdesc_ptr->generic_signature(); | 2622 Symbol* soop = fdesc_ptr->generic_signature(); |
2623 if (soop != NULL) { | 2623 if (soop != NULL) { |
2624 const char* gen_sig = soop->as_C_string(); | 2624 const char* gen_sig = soop->as_C_string(); |
2625 if (gen_sig != NULL) { | 2625 if (gen_sig != NULL) { |
2626 jvmtiError err = allocate(strlen(gen_sig) + 1, (unsigned char **)generic_ptr); | 2626 jvmtiError err = allocate(strlen(gen_sig) + 1, (unsigned char **)generic_ptr); |
2627 if (err != JVMTI_ERROR_NONE) { | 2627 if (err != JVMTI_ERROR_NONE) { |
2693 strcpy(*signature_ptr, utf8_signature); | 2693 strcpy(*signature_ptr, utf8_signature); |
2694 } | 2694 } |
2695 | 2695 |
2696 if (generic_ptr != NULL) { | 2696 if (generic_ptr != NULL) { |
2697 *generic_ptr = NULL; | 2697 *generic_ptr = NULL; |
2698 symbolOop soop = method_oop->generic_signature(); | 2698 Symbol* soop = method_oop->generic_signature(); |
2699 if (soop != NULL) { | 2699 if (soop != NULL) { |
2700 const char* gen_sig = soop->as_C_string(); | 2700 const char* gen_sig = soop->as_C_string(); |
2701 if (gen_sig != NULL) { | 2701 if (gen_sig != NULL) { |
2702 jvmtiError err = allocate(strlen(gen_sig) + 1, (unsigned char **)generic_ptr); | 2702 jvmtiError err = allocate(strlen(gen_sig) + 1, (unsigned char **)generic_ptr); |
2703 if (err != JVMTI_ERROR_NONE) { | 2703 if (err != JVMTI_ERROR_NONE) { |