8014288: perf regression in nashorn JDK-8008448.js test after 8008511 changes

The fix of perf regression is to use method_idnum() for direct indexing into NMT

Reviewed-by: twisti, kvn, coleenp, dholmes
This commit is contained in:
Serguei Spitsyn 2013-05-23 23:04:33 -07:00 committed by Serguei Spitsyn
parent bd53fa8370
commit b2e43ed612
4 changed files with 35 additions and 32 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -232,7 +232,8 @@ oop MethodHandles::init_method_MemberName(Handle mname, Method* m, bool do_dispa
// This is done eagerly, since it is readily available without
// constructing any new objects.
// TO DO: maybe intern mname_oop
m->method_holder()->add_member_name(mname);
m->method_holder()->add_member_name(m->method_idnum(), mname);
return mname();
}
@ -301,7 +302,6 @@ oop MethodHandles::init_field_MemberName(Handle mname, KlassHandle field_holder,
// Although the fieldDescriptor::_index would also identify the field,
// we do not use it, because it is harder to decode.
// TO DO: maybe intern mname_oop
InstanceKlass::cast(field_holder())->add_member_name(mname);
return mname();
}
@ -943,7 +943,8 @@ int MethodHandles::find_MemberNames(KlassHandle k,
// MemberNameTable
//
MemberNameTable::MemberNameTable() : GrowableArray<jweak>(10, true) {
MemberNameTable::MemberNameTable(int methods_cnt)
: GrowableArray<jweak>(methods_cnt, true) {
assert_locked_or_safepoint(MemberNameTable_lock);
}
@ -957,29 +958,18 @@ MemberNameTable::~MemberNameTable() {
}
}
// Return entry index if found, return -1 otherwise.
int MemberNameTable::find_member_name(oop mem_name) {
void MemberNameTable::add_member_name(int index, jweak mem_name_wref) {
assert_locked_or_safepoint(MemberNameTable_lock);
int len = this->length();
for (int idx = 0; idx < len; idx++) {
jweak ref = this->at(idx);
oop entry = JNIHandles::resolve(ref);
if (entry == mem_name) {
return idx;
}
}
return -1;
this->at_put_grow(index, mem_name_wref);
}
void MemberNameTable::add_member_name(jweak mem_name_wref) {
// Return a member name oop or NULL.
oop MemberNameTable::get_member_name(int index) {
assert_locked_or_safepoint(MemberNameTable_lock);
oop mem_name = JNIHandles::resolve(mem_name_wref);
// Each member name may appear just once: add only if not found
if (find_member_name(mem_name) == -1) {
this->append(mem_name_wref);
}
jweak ref = this->at(index);
oop mem_name = JNIHandles::resolve(ref);
return mem_name;
}
#if INCLUDE_JVMTI