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) {