comparison src/share/vm/ci/ciMethod.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 5ddfcf4b079e
children 8033953d67ff
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
120 if (_can_be_statically_bound && h_m()->is_abstract()) 120 if (_can_be_statically_bound && h_m()->is_abstract())
121 _can_be_statically_bound = false; 121 _can_be_statically_bound = false;
122 122
123 // generating _signature may allow GC and therefore move m. 123 // generating _signature may allow GC and therefore move m.
124 // These fields are always filled in. 124 // These fields are always filled in.
125 _name = env->get_object(h_m()->name())->as_symbol(); 125 _name = env->get_symbol(h_m()->name());
126 _holder = env->get_object(h_m()->method_holder())->as_instance_klass(); 126 _holder = env->get_object(h_m()->method_holder())->as_instance_klass();
127 ciSymbol* sig_symbol = env->get_object(h_m()->signature())->as_symbol(); 127 ciSymbol* sig_symbol = env->get_symbol(h_m()->signature());
128 _signature = new (env->arena()) ciSignature(_holder, sig_symbol); 128 _signature = new (env->arena()) ciSignature(_holder, sig_symbol);
129 _method_data = NULL; 129 _method_data = NULL;
130 // Take a snapshot of these values, so they will be commensurate with the MDO. 130 // Take a snapshot of these values, so they will be commensurate with the MDO.
131 if (ProfileInterpreter || TieredCompilation) { 131 if (ProfileInterpreter || TieredCompilation) {
132 int invcnt = h_m()->interpreter_invocation_count(); 132 int invcnt = h_m()->interpreter_invocation_count();
647 VM_ENTRY_MARK; 647 VM_ENTRY_MARK;
648 648
649 KlassHandle caller_klass (THREAD, caller->get_klassOop()); 649 KlassHandle caller_klass (THREAD, caller->get_klassOop());
650 KlassHandle h_recv (THREAD, exact_receiver->get_klassOop()); 650 KlassHandle h_recv (THREAD, exact_receiver->get_klassOop());
651 KlassHandle h_resolved (THREAD, holder()->get_klassOop()); 651 KlassHandle h_resolved (THREAD, holder()->get_klassOop());
652 symbolHandle h_name (THREAD, name()->get_symbolOop()); 652 Symbol* h_name = name()->get_symbol();
653 symbolHandle h_signature (THREAD, signature()->get_symbolOop()); 653 Symbol* h_signature = signature()->get_symbol();
654 654
655 methodHandle m; 655 methodHandle m;
656 // Only do exact lookup if receiver klass has been linked. Otherwise, 656 // Only do exact lookup if receiver klass has been linked. Otherwise,
657 // the vtable has not been setup, and the LinkResolver will fail. 657 // the vtable has not been setup, and the LinkResolver will fail.
658 if (h_recv->oop_is_javaArray() 658 if (h_recv->oop_is_javaArray()
700 receiver->as_instance_klass()->is_linked())) { 700 receiver->as_instance_klass()->is_linked())) {
701 VM_ENTRY_MARK; 701 VM_ENTRY_MARK;
702 702
703 KlassHandle caller_klass (THREAD, caller->get_klassOop()); 703 KlassHandle caller_klass (THREAD, caller->get_klassOop());
704 KlassHandle h_recv (THREAD, receiver->get_klassOop()); 704 KlassHandle h_recv (THREAD, receiver->get_klassOop());
705 symbolHandle h_name (THREAD, name()->get_symbolOop()); 705 Symbol* h_name = name()->get_symbol();
706 symbolHandle h_signature (THREAD, signature()->get_symbolOop()); 706 Symbol* h_signature = signature()->get_symbol();
707 707
708 vtable_index = LinkResolver::resolve_virtual_vtable_index(h_recv, h_recv, h_name, h_signature, caller_klass); 708 vtable_index = LinkResolver::resolve_virtual_vtable_index(h_recv, h_recv, h_name, h_signature, caller_klass);
709 if (vtable_index == methodOopDesc::nonvirtual_vtable_index) { 709 if (vtable_index == methodOopDesc::nonvirtual_vtable_index) {
710 // A statically bound method. Return "no such index". 710 // A statically bound method. Return "no such index".
711 vtable_index = methodOopDesc::invalid_vtable_index; 711 vtable_index = methodOopDesc::invalid_vtable_index;