8155672: Remove instanceKlassHandles and KlassHandles
Summary: Summary: Use unhandled pointers for Klass and InstanceKlass, remove handles with no implementation.
Reviewed-by: dholmes, lfoltan, vlivanov, sspitsyn
--- a/hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -63,7 +63,7 @@
Register obj, SystemDictionary::WKID klass_id,
const char* error_message) {
InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
- KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
+ Klass* klass = SystemDictionary::well_known_klass(klass_id);
Register temp = rscratch2;
Register temp2 = rscratch1; // used by MacroAssembler::cmpptr
Label L_ok, L_bad;
--- a/hotspot/src/cpu/arm/vm/methodHandles_arm.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/cpu/arm/vm/methodHandles_arm.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, 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
@@ -67,7 +67,7 @@
Register obj, Register temp1, Register temp2, SystemDictionary::WKID klass_id,
const char* error_message) {
InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
- KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
+ Klass* klass = SystemDictionary::well_known_klass(klass_id);
Label L_ok, L_bad;
BLOCK_COMMENT("verify_klass {");
__ verify_oop(obj);
--- a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015 SAP SE. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -71,7 +71,7 @@
Register temp_reg, Register temp2_reg,
const char* error_message) {
InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
- KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
+ Klass* klass = SystemDictionary::well_known_klass(klass_id);
Label L_ok, L_bad;
BLOCK_COMMENT("verify_klass {");
__ verify_oop(obj_reg);
--- a/hotspot/src/cpu/s390/vm/methodHandles_s390.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/cpu/s390/vm/methodHandles_s390.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016 SAP SE. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -73,7 +73,7 @@
const char* error_message) {
InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
- KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
+ KLass* klass = SystemDictionary::well_known_klass(klass_id);
assert(temp_reg != Z_R0 && // Is used as base register!
temp_reg != noreg && temp2_reg != noreg, "need valid registers!");
--- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, 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
@@ -71,7 +71,7 @@
Register temp_reg, Register temp2_reg,
const char* error_message) {
InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
- KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
+ Klass* klass = SystemDictionary::well_known_klass(klass_id);
bool did_save = false;
if (temp_reg == noreg || temp2_reg == noreg) {
temp_reg = L1;
--- a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -65,7 +65,7 @@
Register obj, SystemDictionary::WKID klass_id,
const char* error_message) {
InstanceKlass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id);
- KlassHandle klass = SystemDictionary::well_known_klass(klass_id);
+ Klass* klass = SystemDictionary::well_known_klass(klass_id);
Register temp = rdi;
Register temp2 = noreg;
LP64_ONLY(temp2 = rscratch1); // used by MacroAssembler::cmpptr
--- a/hotspot/src/share/vm/aot/aotCodeHeap.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/aot/aotCodeHeap.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -560,7 +560,7 @@
}
#endif
-Method* AOTCodeHeap::find_method(KlassHandle klass, Thread* thread, const char* method_name) {
+Method* AOTCodeHeap::find_method(Klass* klass, Thread* thread, const char* method_name) {
int method_name_len = build_u2_from((address)method_name);
method_name += 2;
const char* signature_name = method_name + method_name_len;
@@ -578,14 +578,14 @@
name == vmSymbols::class_initializer_name()) {
// Never search superclasses for constructors
if (klass->is_instance_klass()) {
- m = InstanceKlass::cast(klass())->find_method(name, signature);
+ m = InstanceKlass::cast(klass)->find_method(name, signature);
} else {
m = NULL;
}
} else {
m = klass->lookup_method(name, signature);
if (m == NULL && klass->is_instance_klass()) {
- m = InstanceKlass::cast(klass())->lookup_method_in_ordered_interfaces(name, signature);
+ m = InstanceKlass::cast(klass)->lookup_method_in_ordered_interfaces(name, signature);
}
}
if (m == NULL) {
@@ -669,28 +669,28 @@
}
}
-bool AOTCodeHeap::load_klass_data(instanceKlassHandle kh, Thread* thread) {
+bool AOTCodeHeap::load_klass_data(InstanceKlass* ik, Thread* thread) {
ResourceMark rm;
NOT_PRODUCT( klasses_seen++; )
- AOTKlassData* klass_data = find_klass(kh());
+ AOTKlassData* klass_data = find_klass(ik);
if (klass_data == NULL) {
return false;
}
- if (!kh->has_passed_fingerprint_check()) {
+ if (!ik->has_passed_fingerprint_check()) {
NOT_PRODUCT( aot_klasses_fp_miss++; )
log_trace(aot, class, fingerprint)("class %s%s has bad fingerprint in %s tid=" INTPTR_FORMAT,
- kh->internal_name(), kh->is_shared() ? " (shared)" : "",
+ ik->internal_name(), ik->is_shared() ? " (shared)" : "",
_lib->name(), p2i(thread));
sweep_dependent_methods(klass_data);
return false;
}
- if (kh->has_been_redefined()) {
+ if (ik->has_been_redefined()) {
log_trace(aot, class, load)("class %s%s in %s has been redefined tid=" INTPTR_FORMAT,
- kh->internal_name(), kh->is_shared() ? " (shared)" : "",
+ ik->internal_name(), ik->is_shared() ? " (shared)" : "",
_lib->name(), p2i(thread));
sweep_dependent_methods(klass_data);
return false;
@@ -698,26 +698,26 @@
assert(klass_data->_class_id < _class_count, "invalid class id");
AOTClass* aot_class = &_classes[klass_data->_class_id];
- if (aot_class->_classloader != NULL && aot_class->_classloader != kh->class_loader_data()) {
+ if (aot_class->_classloader != NULL && aot_class->_classloader != ik->class_loader_data()) {
log_trace(aot, class, load)("class %s in %s already loaded for classloader %p vs %p tid=" INTPTR_FORMAT,
- kh->internal_name(), _lib->name(), aot_class->_classloader, kh->class_loader_data(), p2i(thread));
+ ik->internal_name(), _lib->name(), aot_class->_classloader, ik->class_loader_data(), p2i(thread));
NOT_PRODUCT( aot_klasses_cl_miss++; )
return false;
}
- if (_lib->config()->_omitAssertions && JavaAssertions::enabled(kh->name()->as_C_string(), kh->class_loader() == NULL)) {
- log_trace(aot, class, load)("class %s in %s does not have java assertions in compiled code, but assertions are enabled for this execution.", kh->internal_name(), _lib->name());
+ if (_lib->config()->_omitAssertions && JavaAssertions::enabled(ik->name()->as_C_string(), ik->class_loader() == NULL)) {
+ log_trace(aot, class, load)("class %s in %s does not have java assertions in compiled code, but assertions are enabled for this execution.", ik->internal_name(), _lib->name());
sweep_dependent_methods(klass_data);
return false;
}
NOT_PRODUCT( aot_klasses_found++; )
- log_trace(aot, class, load)("found %s in %s for classloader %p tid=" INTPTR_FORMAT, kh->internal_name(), _lib->name(), kh->class_loader_data(), p2i(thread));
+ log_trace(aot, class, load)("found %s in %s for classloader %p tid=" INTPTR_FORMAT, ik->internal_name(), _lib->name(), ik->class_loader_data(), p2i(thread));
- aot_class->_classloader = kh->class_loader_data();
+ aot_class->_classloader = ik->class_loader_data();
// Set klass's Resolve (second) got cell.
- _metaspace_got[klass_data->_got_index] = kh();
+ _metaspace_got[klass_data->_got_index] = ik;
// Initialize global symbols of the DSO to the corresponding VM symbol values.
link_global_lib_symbols();
@@ -745,7 +745,7 @@
// aot_name format: "<u2_size>Ljava/lang/ThreadGroup;<u2_size>addUnstarted<u2_size>()V"
int klass_len = build_u2_from((address)aot_name);
const char* method_name = aot_name + 2 + klass_len;
- Method* m = AOTCodeHeap::find_method(kh, thread, method_name);
+ Method* m = AOTCodeHeap::find_method(ik, thread, method_name);
methodHandle mh(thread, m);
if (mh->code() != NULL) { // Does it have already compiled code?
continue; // Don't overwrite
@@ -866,7 +866,7 @@
}
#endif
-void AOTCodeHeap::flush_evol_dependents_on(instanceKlassHandle dependee) {
+void AOTCodeHeap::flush_evol_dependents_on(InstanceKlass* dependee) {
for (int index = 0; index < _method_count; index++) {
if (_code_to_aot[index]._state != in_use) {
continue; // Skip uninitialized entries.
--- a/hotspot/src/share/vm/aot/aotCodeHeap.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/aot/aotCodeHeap.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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
@@ -253,7 +253,7 @@
virtual void* next(void *p) const;
AOTKlassData* find_klass(InstanceKlass* ik);
- bool load_klass_data(instanceKlassHandle kh, Thread* thread);
+ bool load_klass_data(InstanceKlass* ik, Thread* thread);
Klass* get_klass_from_got(const char* klass_name, int klass_len, const Method* method);
void sweep_dependent_methods(AOTKlassData* klass_data);
bool is_dependent_method(Klass* dependee, AOTCompiledMethod* aot);
@@ -289,13 +289,13 @@
return NULL;
}
- static Method* find_method(KlassHandle klass, Thread* thread, const char* method_name);
+ static Method* find_method(Klass* klass, Thread* thread, const char* method_name);
void cleanup_inline_caches();
DEBUG_ONLY( int verify_icholder_relocations(); )
- void flush_evol_dependents_on(instanceKlassHandle dependee);
+ void flush_evol_dependents_on(InstanceKlass* dependee);
void alive_methods_do(void f(CompiledMethod* nm));
--- a/hotspot/src/share/vm/aot/aotCompiledMethod.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/aot/aotCompiledMethod.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -143,9 +143,8 @@
int full_len = 2 + klass_len + 2 + method_name_len + 2 + signature_len;
if (!klass_matched || memcmp(_name, meta_name, full_len) != 0) { // Does not match?
Thread* thread = Thread::current();
- KlassHandle klass = KlassHandle(thread, k);
const char* method_name = klass_name + klass_len;
- m = AOTCodeHeap::find_method(klass, thread, method_name);
+ m = AOTCodeHeap::find_method(k, thread, method_name);
}
meta = ((intptr_t)m) | 1;
*entry = (Metadata*)meta; // Should be atomic on x64
@@ -239,7 +238,7 @@
// We don't have full dependencies for AOT methods, so flushing is
// more conservative than for nmethods.
-void AOTCompiledMethod::flush_evol_dependents_on(instanceKlassHandle dependee) {
+void AOTCompiledMethod::flush_evol_dependents_on(InstanceKlass* dependee) {
if (is_java_method()) {
cleanup_inline_caches();
mark_for_deoptimization();
--- a/hotspot/src/share/vm/aot/aotCompiledMethod.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/aot/aotCompiledMethod.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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
@@ -240,7 +240,7 @@
#ifdef HOTSWAP
// Flushing and deoptimization in case of evolution
- void flush_evol_dependents_on(instanceKlassHandle dependee);
+ void flush_evol_dependents_on(InstanceKlass* dependee);
#endif // HOTSWAP
virtual void metadata_do(void f(Metadata*));
--- a/hotspot/src/share/vm/aot/aotLoader.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/aot/aotLoader.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -37,10 +37,10 @@
// Iterate over all AOT Libraries
#define FOR_ALL_AOT_LIBRARIES(lib) for (GrowableArrayIterator<AOTLib*> lib = libraries()->begin(); lib != libraries()->end(); ++lib)
-void AOTLoader::load_for_klass(instanceKlassHandle kh, Thread* thread) {
+void AOTLoader::load_for_klass(InstanceKlass* ik, Thread* thread) {
if (UseAOT) {
FOR_ALL_AOT_HEAPS(heap) {
- (*heap)->load_klass_data(kh, thread);
+ (*heap)->load_klass_data(ik, thread);
}
}
}
@@ -98,7 +98,7 @@
}
// Flushing and deoptimization in case of evolution
-void AOTLoader::flush_evol_dependents_on(instanceKlassHandle dependee) {
+void AOTLoader::flush_evol_dependents_on(InstanceKlass* dependee) {
// make non entrant and mark for deoptimization
FOR_ALL_AOT_HEAPS(heap) {
(*heap)->flush_evol_dependents_on(dependee);
--- a/hotspot/src/share/vm/aot/aotLoader.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/aot/aotLoader.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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
@@ -58,7 +58,7 @@
static void universe_init() NOT_AOT_RETURN;
static void set_narrow_klass_shift() NOT_AOT_RETURN;
static bool contains(address p) NOT_AOT({ return false; });
- static void load_for_klass(instanceKlassHandle, Thread* thread) NOT_AOT_RETURN;
+ static void load_for_klass(InstanceKlass* ik, Thread* thread) NOT_AOT_RETURN;
static bool find_klass(InstanceKlass* ik) NOT_AOT({ return false; });
static uint64_t get_saved_fingerprint(InstanceKlass* ik) NOT_AOT({ return 0; });
static void oops_do(OopClosure* f) NOT_AOT_RETURN;
@@ -69,7 +69,7 @@
#ifdef HOTSWAP
// Flushing and deoptimization in case of evolution
- static void flush_evol_dependents_on(instanceKlassHandle dependee) NOT_AOT_RETURN;
+ static void flush_evol_dependents_on(InstanceKlass* dependee) NOT_AOT_RETURN;
#endif // HOTSWAP
};
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -331,7 +331,7 @@
assert(klass->is_klass(), "not a class");
Handle holder(THREAD, klass->klass_holder()); // keep the klass alive
- instanceKlassHandle h(thread, klass);
+ InstanceKlass* h = InstanceKlass::cast(klass);
h->check_valid_for_instantiation(true, CHECK);
// make sure klass is initialized
h->initialize(CHECK);
@@ -857,8 +857,8 @@
bool deoptimize_for_volatile = false;
bool deoptimize_for_atomic = false;
int patch_field_offset = -1;
- KlassHandle init_klass(THREAD, NULL); // klass needed by load_klass_patching code
- KlassHandle load_klass(THREAD, NULL); // klass needed by load_klass_patching code
+ Klass* init_klass = NULL; // klass needed by load_klass_patching code
+ Klass* load_klass = NULL; // klass needed by load_klass_patching code
Handle mirror(THREAD, NULL); // oop needed by load_mirror_patching code
Handle appendix(THREAD, NULL); // oop needed by appendix_patching code
bool load_klass_or_mirror_patch_id =
@@ -905,7 +905,7 @@
case Bytecodes::_putstatic:
case Bytecodes::_getstatic:
{ Klass* klass = resolve_field_return_klass(caller_method, bci, CHECK);
- init_klass = KlassHandle(THREAD, klass);
+ init_klass = klass;
mirror = Handle(THREAD, klass->java_mirror());
}
break;
@@ -945,8 +945,7 @@
break;
default: fatal("unexpected bytecode for load_klass_or_mirror_patch_id");
}
- // convert to handle
- load_klass = KlassHandle(THREAD, k);
+ load_klass = k;
} else if (stub_id == load_appendix_patching_id) {
Bytecode_invoke bytecode(caller_method, bci);
Bytecodes::Code bc = bytecode.invoke_code();
@@ -1067,7 +1066,7 @@
// initializing thread are forced to come into the VM and
// block.
do_patch = (code != Bytecodes::_getstatic && code != Bytecodes::_putstatic) ||
- InstanceKlass::cast(init_klass())->is_initialized();
+ InstanceKlass::cast(init_klass)->is_initialized();
NativeGeneralJump* jump = nativeGeneralJump_at(instr_pc);
if (jump->jump_destination() == being_initialized_entry) {
assert(do_patch == true, "initialization must be complete at this point");
@@ -1079,8 +1078,8 @@
n_copy->data() == (intptr_t)Universe::non_oop_word(),
"illegal init value");
if (stub_id == Runtime1::load_klass_patching_id) {
- assert(load_klass() != NULL, "klass not set");
- n_copy->set_data((intx) (load_klass()));
+ assert(load_klass != NULL, "klass not set");
+ n_copy->set_data((intx) (load_klass));
} else {
assert(mirror() != NULL, "klass not set");
// Don't need a G1 pre-barrier here since we assert above that data isn't an oop.
@@ -1131,7 +1130,7 @@
assert(stub_id == Runtime1::load_klass_patching_id, "wrong stub id");
metadata_Relocation* r = mds.metadata_reloc();
Metadata** metadata_adr = r->metadata_addr();
- *metadata_adr = load_klass();
+ *metadata_adr = load_klass;
r->fix_metadata_relocation();
found = true;
}
--- a/hotspot/src/share/vm/ci/ciArrayKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciArrayKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -37,7 +37,7 @@
// ciArrayKlass::ciArrayKlass
//
// Loaded array klass.
-ciArrayKlass::ciArrayKlass(KlassHandle h_k) : ciKlass(h_k) {
+ciArrayKlass::ciArrayKlass(Klass* k) : ciKlass(k) {
assert(get_Klass()->is_array_klass(), "wrong type");
_dimension = get_ArrayKlass()->dimension();
}
--- a/hotspot/src/share/vm/ci/ciArrayKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciArrayKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -37,7 +37,7 @@
jint _dimension;
protected:
- ciArrayKlass(KlassHandle h_k);
+ ciArrayKlass(Klass* k);
ciArrayKlass(ciSymbol* name, int dimension, BasicType bt);
ArrayKlass* get_ArrayKlass() {
--- a/hotspot/src/share/vm/ci/ciEnv.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -426,7 +426,7 @@
} else {
fail_type = _unloaded_ciinstance_klass;
}
- KlassHandle found_klass;
+ Klass* found_klass;
{
ttyUnlocker ttyul; // release tty lock to avoid ordering problems
MutexLocker ml(Compile_lock);
@@ -438,7 +438,7 @@
kls = SystemDictionary::find_instance_or_array_klass(sym, loader, domain,
KILL_COMPILE_ON_FATAL_(fail_type));
}
- found_klass = KlassHandle(THREAD, kls);
+ found_klass = kls;
}
// If we fail to find an array klass, look again for its element type.
@@ -467,22 +467,22 @@
}
}
- if (found_klass() == NULL && !cpool.is_null() && cpool->has_preresolution()) {
+ if (found_klass == NULL && !cpool.is_null() && cpool->has_preresolution()) {
// Look inside the constant pool for pre-resolved class entries.
for (int i = cpool->length() - 1; i >= 1; i--) {
if (cpool->tag_at(i).is_klass()) {
Klass* kls = cpool->resolved_klass_at(i);
if (kls->name() == sym) {
- found_klass = KlassHandle(THREAD, kls);
+ found_klass = kls;
break;
}
}
}
}
- if (found_klass() != NULL) {
+ if (found_klass != NULL) {
// Found it. Build a CI handle.
- return get_klass(found_klass());
+ return get_klass(found_klass);
}
if (require_local) return NULL;
@@ -512,21 +512,21 @@
bool& is_accessible,
ciInstanceKlass* accessor) {
EXCEPTION_CONTEXT;
- KlassHandle klass; // = NULL;
+ Klass* klass = NULL;
Symbol* klass_name = NULL;
if (cpool->tag_at(index).is_symbol()) {
klass_name = cpool->symbol_at(index);
} else {
// Check if it's resolved if it's not a symbol constant pool entry.
- klass = KlassHandle(THREAD, ConstantPool::klass_at_if_loaded(cpool, index));
+ klass = ConstantPool::klass_at_if_loaded(cpool, index);
// Try to look it up by name.
- if (klass.is_null()) {
+ if (klass == NULL) {
klass_name = cpool->klass_name_at(index);
- }
+ }
}
- if (klass.is_null()) {
+ if (klass == NULL) {
// Not found in constant pool. Use the name to do the lookup.
ciKlass* k = get_klass_by_name_impl(accessor,
cpool,
@@ -548,7 +548,7 @@
// Check for prior unloaded klass. The SystemDictionary's answers
// can vary over time but the compiler needs consistency.
- ciSymbol* name = get_symbol(klass()->name());
+ ciSymbol* name = get_symbol(klass->name());
ciKlass* unloaded_klass = check_get_unloaded_klass(accessor, name);
if (unloaded_klass != NULL) {
is_accessible = false;
@@ -557,7 +557,7 @@
// It is known to be accessible, since it was found in the constant pool.
is_accessible = true;
- return get_klass(klass());
+ return get_klass(klass);
}
// ------------------------------------------------------------------
@@ -713,10 +713,10 @@
// Accessibility checks are performed in ciEnv::get_method_by_index_impl.
assert(check_klass_accessibility(accessor, holder->get_Klass()), "holder not accessible");
- KlassHandle h_accessor(accessor->get_instanceKlass());
- KlassHandle h_holder(holder->get_Klass());
+ InstanceKlass* accessor_klass = accessor->get_instanceKlass();
+ Klass* holder_klass = holder->get_Klass();
methodHandle dest_method;
- LinkInfo link_info(h_holder, name, sig, h_accessor, LinkInfo::needs_access_check, tag);
+ LinkInfo link_info(holder_klass, name, sig, accessor_klass, LinkInfo::needs_access_check, tag);
switch (bc) {
case Bytecodes::_invokestatic:
dest_method =
--- a/hotspot/src/share/vm/ci/ciInstanceKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciInstanceKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -44,8 +44,8 @@
// ciInstanceKlass::ciInstanceKlass
//
// Loaded instance klass.
-ciInstanceKlass::ciInstanceKlass(KlassHandle h_k) :
- ciKlass(h_k)
+ciInstanceKlass::ciInstanceKlass(Klass* k) :
+ ciKlass(k)
{
assert(get_Klass()->is_instance_klass(), "wrong type");
assert(get_instanceKlass()->is_loaded(), "must be at least loaded");
@@ -83,7 +83,7 @@
_java_mirror = NULL;
if (is_shared()) {
- if (h_k() != SystemDictionary::Object_klass()) {
+ if (k != SystemDictionary::Object_klass()) {
super();
}
//compute_nonstatic_fields(); // done outside of constructor
--- a/hotspot/src/share/vm/ci/ciInstanceKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciInstanceKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -77,7 +77,7 @@
bool compute_injected_fields_helper();
protected:
- ciInstanceKlass(KlassHandle h_k);
+ ciInstanceKlass(Klass* k);
ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
InstanceKlass* get_instanceKlass() const {
--- a/hotspot/src/share/vm/ci/ciKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -35,11 +35,11 @@
// ------------------------------------------------------------------
// ciKlass::ciKlass
-ciKlass::ciKlass(KlassHandle h_k) : ciType(h_k) {
+ciKlass::ciKlass(Klass* k) : ciType(k) {
assert(get_Klass()->is_klass(), "wrong type");
- Klass* k = get_Klass();
- _layout_helper = k->layout_helper();
- Symbol* klass_name = k->name();
+ Klass* klass = get_Klass();
+ _layout_helper = klass->layout_helper();
+ Symbol* klass_name = klass->name();
assert(klass_name != NULL, "wrong ciKlass constructor");
_name = CURRENT_ENV->get_symbol(klass_name);
}
@@ -48,7 +48,7 @@
// ciKlass::ciKlass
//
// Nameless klass variant.
-ciKlass::ciKlass(KlassHandle h_k, ciSymbol* name) : ciType(h_k) {
+ciKlass::ciKlass(Klass* k, ciSymbol* name) : ciType(k) {
assert(get_Klass()->is_klass(), "wrong type");
_name = name;
_layout_helper = Klass::_lh_neutral_value;
--- a/hotspot/src/share/vm/ci/ciKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -51,7 +51,7 @@
jint _layout_helper;
protected:
- ciKlass(KlassHandle k_h, ciSymbol* name);
+ ciKlass(Klass* k, ciSymbol* name);
ciKlass(ciSymbol* name, BasicType bt);
Klass* get_Klass() const {
@@ -72,7 +72,7 @@
void print_impl(outputStream* st);
public:
- ciKlass(KlassHandle k_h);
+ ciKlass(Klass* k);
// What is the name of this klass?
ciSymbol* name() const { return _name; }
--- a/hotspot/src/share/vm/ci/ciMethod.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciMethod.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -783,24 +783,24 @@
check_is_loaded();
VM_ENTRY_MARK;
- KlassHandle caller_klass (THREAD, caller->get_Klass());
- KlassHandle h_recv (THREAD, exact_receiver->get_Klass());
- KlassHandle h_resolved (THREAD, holder()->get_Klass());
+ Klass* caller_klass = caller->get_Klass();
+ Klass* recv = exact_receiver->get_Klass();
+ Klass* resolved = holder()->get_Klass();
Symbol* h_name = name()->get_symbol();
Symbol* h_signature = signature()->get_symbol();
- LinkInfo link_info(h_resolved, h_name, h_signature, caller_klass,
+ LinkInfo link_info(resolved, h_name, h_signature, caller_klass,
check_access ? LinkInfo::needs_access_check : LinkInfo::skip_access_check);
methodHandle m;
// Only do exact lookup if receiver klass has been linked. Otherwise,
// the vtable has not been setup, and the LinkResolver will fail.
- if (h_recv->is_array_klass()
+ if (recv->is_array_klass()
||
- InstanceKlass::cast(h_recv())->is_linked() && !exact_receiver->is_interface()) {
+ InstanceKlass::cast(recv)->is_linked() && !exact_receiver->is_interface()) {
if (holder()->is_interface()) {
- m = LinkResolver::resolve_interface_call_or_null(h_recv, link_info);
+ m = LinkResolver::resolve_interface_call_or_null(recv, link_info);
} else {
- m = LinkResolver::resolve_virtual_call_or_null(h_recv, link_info);
+ m = LinkResolver::resolve_virtual_call_or_null(recv, link_info);
}
}
@@ -839,13 +839,13 @@
receiver->as_instance_klass()->is_linked())) {
VM_ENTRY_MARK;
- KlassHandle caller_klass (THREAD, caller->get_Klass());
- KlassHandle h_recv (THREAD, receiver->get_Klass());
+ Klass* caller_klass = caller->get_Klass();
+ Klass* recv = receiver->get_Klass();
Symbol* h_name = name()->get_symbol();
Symbol* h_signature = signature()->get_symbol();
- LinkInfo link_info(h_recv, h_name, h_signature, caller_klass);
- vtable_index = LinkResolver::resolve_virtual_vtable_index(h_recv, link_info);
+ LinkInfo link_info(recv, h_name, h_signature, caller_klass);
+ vtable_index = LinkResolver::resolve_virtual_vtable_index(recv, link_info);
if (vtable_index == Method::nonvirtual_vtable_index) {
// A statically bound method. Return "no such index".
vtable_index = Method::invalid_vtable_index;
--- a/hotspot/src/share/vm/ci/ciObjArrayKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciObjArrayKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -38,7 +38,7 @@
// ciObjArrayKlass::ciObjArrayKlass
//
// Constructor for loaded object array klasses.
-ciObjArrayKlass::ciObjArrayKlass(KlassHandle h_k) : ciArrayKlass(h_k) {
+ciObjArrayKlass::ciObjArrayKlass(Klass* k) : ciArrayKlass(k) {
assert(get_Klass()->is_objArray_klass(), "wrong type");
Klass* element_Klass = get_ObjArrayKlass()->bottom_klass();
_base_element_klass = CURRENT_ENV->get_klass(element_Klass);
--- a/hotspot/src/share/vm/ci/ciObjArrayKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciObjArrayKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -40,7 +40,7 @@
ciKlass* _base_element_klass;
protected:
- ciObjArrayKlass(KlassHandle h_k);
+ ciObjArrayKlass(Klass* k);
ciObjArrayKlass(ciSymbol* array_name,
ciKlass* base_element_klass,
int dimension);
--- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -377,14 +377,13 @@
}
if (o->is_klass()) {
- KlassHandle h_k(THREAD, (Klass*)o);
Klass* k = (Klass*)o;
if (k->is_instance_klass()) {
- return new (arena()) ciInstanceKlass(h_k);
+ return new (arena()) ciInstanceKlass(k);
} else if (k->is_objArray_klass()) {
- return new (arena()) ciObjArrayKlass(h_k);
+ return new (arena()) ciObjArrayKlass(k);
} else if (k->is_typeArray_klass()) {
- return new (arena()) ciTypeArrayKlass(h_k);
+ return new (arena()) ciTypeArrayKlass(k);
}
} else if (o->is_method()) {
methodHandle h_m(THREAD, (Method*)o);
--- a/hotspot/src/share/vm/ci/ciReplay.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciReplay.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, 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
@@ -799,8 +799,8 @@
} else if (strcmp(field_signature, "[J") == 0) {
value = oopFactory::new_longArray(length, CHECK);
} else if (field_signature[0] == '[' && field_signature[1] == 'L') {
- KlassHandle kelem = resolve_klass(field_signature + 1, CHECK);
- value = oopFactory::new_objArray(kelem(), length, CHECK);
+ Klass* kelem = resolve_klass(field_signature + 1, CHECK);
+ value = oopFactory::new_objArray(kelem, length, CHECK);
} else {
report_error("unhandled array staticfield");
}
@@ -840,8 +840,8 @@
Handle value = java_lang_String::create_from_str(string_value, CHECK);
java_mirror->obj_field_put(fd.offset(), value());
} else if (field_signature[0] == 'L') {
- KlassHandle k = resolve_klass(string_value, CHECK);
- oop value = InstanceKlass::cast(k())->allocate_instance(CHECK);
+ Klass* k = resolve_klass(string_value, CHECK);
+ oop value = InstanceKlass::cast(k)->allocate_instance(CHECK);
java_mirror->obj_field_put(fd.offset(), value);
} else {
report_error("unhandled staticfield");
--- a/hotspot/src/share/vm/ci/ciType.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciType.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -45,8 +45,8 @@
_basic_type = basic_type;
}
-ciType::ciType(KlassHandle k) : ciMetadata(k()) {
- _basic_type = k()->is_array_klass() ? T_ARRAY : T_OBJECT;
+ciType::ciType(Klass* k) : ciMetadata(k) {
+ _basic_type = k->is_array_klass() ? T_ARRAY : T_OBJECT;
}
--- a/hotspot/src/share/vm/ci/ciType.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciType.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -40,7 +40,7 @@
BasicType _basic_type;
ciType(BasicType t); // for primitive and unloaded types
- ciType(KlassHandle k); // for subclasses (reference types)
+ ciType(Klass* k); // for subclasses (reference types)
const char* type_string() { return "ciType"; }
--- a/hotspot/src/share/vm/ci/ciTypeArrayKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciTypeArrayKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -33,7 +33,7 @@
// ------------------------------------------------------------------
// ciTypeArrayKlass::ciTypeArrayKlass
-ciTypeArrayKlass::ciTypeArrayKlass(KlassHandle h_k) : ciArrayKlass(h_k) {
+ciTypeArrayKlass::ciTypeArrayKlass(Klass* k) : ciArrayKlass(k) {
assert(get_Klass()->is_typeArray_klass(), "wrong type");
assert(element_type() == get_TypeArrayKlass()->element_type(), "");
}
--- a/hotspot/src/share/vm/ci/ciTypeArrayKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciTypeArrayKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -35,7 +35,7 @@
CI_PACKAGE_ACCESS
protected:
- ciTypeArrayKlass(KlassHandle h_k);
+ ciTypeArrayKlass(Klass* k);
TypeArrayKlass* get_TypeArrayKlass() {
return (TypeArrayKlass*)get_Klass();
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -815,13 +815,13 @@
int index;
for (index = 0; index < itfs_len; index++) {
const u2 interface_index = stream->get_u2(CHECK);
- KlassHandle interf;
+ Klass* interf;
check_property(
valid_klass_reference_at(interface_index),
"Interface name has bad constant pool index %u in class file %s",
interface_index, CHECK);
if (cp->tag_at(interface_index).is_klass()) {
- interf = KlassHandle(THREAD, cp->resolved_klass_at(interface_index));
+ interf = cp->resolved_klass_at(interface_index);
} else {
Symbol* const unresolved_klass = cp->klass_name_at(interface_index);
@@ -831,25 +831,24 @@
"Bad interface name in class file %s", CHECK);
// Call resolve_super so classcircularity is checked
- const Klass* const k =
- SystemDictionary::resolve_super_or_fail(_class_name,
+ interf = SystemDictionary::resolve_super_or_fail(
+ _class_name,
unresolved_klass,
Handle(THREAD, _loader_data->class_loader()),
_protection_domain,
false,
CHECK);
- interf = KlassHandle(THREAD, k);
}
- if (!interf()->is_interface()) {
+ if (!interf->is_interface()) {
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(),
"Implementing class");
}
- if (InstanceKlass::cast(interf())->has_nonstatic_concrete_methods()) {
+ if (InstanceKlass::cast(interf)->has_nonstatic_concrete_methods()) {
*has_nonstatic_concrete_methods = true;
}
- _local_interfaces->at_put(index, interf());
+ _local_interfaces->at_put(index, interf);
}
if (!_need_verify || itfs_len <= 1) {
--- a/hotspot/src/share/vm/classfile/classLoader.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1405,7 +1405,7 @@
return NULL;
}
-instanceKlassHandle ClassLoader::load_class(Symbol* name, bool search_append_only, TRAPS) {
+InstanceKlass* ClassLoader::load_class(Symbol* name, bool search_append_only, TRAPS) {
assert(name != NULL, "invariant");
assert(THREAD->is_Java_thread(), "must be a JavaThread");
@@ -1512,13 +1512,13 @@
ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
Handle protection_domain;
- instanceKlassHandle result = KlassFactory::create_from_stream(stream,
- name,
- loader_data,
- protection_domain,
- NULL, // host_klass
- NULL, // cp_patches
- THREAD);
+ InstanceKlass* result = KlassFactory::create_from_stream(stream,
+ name,
+ loader_data,
+ protection_domain,
+ NULL, // host_klass
+ NULL, // cp_patches
+ THREAD);
if (HAS_PENDING_EXCEPTION) {
if (DumpSharedSpaces) {
tty->print_cr("Preload Error: Failed to load %s", class_name);
@@ -1891,15 +1891,15 @@
// Construct name without extension
TempNewSymbol sym = SymbolTable::new_symbol(buffer, CHECK);
// Use loader to load and initialize class
- Klass* ik = SystemDictionary::resolve_or_null(sym, loader, Handle(), THREAD);
- instanceKlassHandle k (THREAD, ik);
- if (k.not_null() && !HAS_PENDING_EXCEPTION) {
+ Klass* k = SystemDictionary::resolve_or_null(sym, loader, Handle(), THREAD);
+ if (k != NULL && !HAS_PENDING_EXCEPTION) {
k->initialize(THREAD);
}
bool exception_occurred = HAS_PENDING_EXCEPTION;
clear_pending_exception_if_not_oom(CHECK);
- if (CompileTheWorldPreloadClasses && k.not_null()) {
- ConstantPool::preload_and_initialize_all_classes(k->constants(), THREAD);
+ if (CompileTheWorldPreloadClasses && k != NULL) {
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ ConstantPool::preload_and_initialize_all_classes(ik->constants(), THREAD);
if (HAS_PENDING_EXCEPTION) {
// If something went wrong in preloading we just ignore it
clear_pending_exception_if_not_oom(CHECK);
@@ -1908,7 +1908,7 @@
}
if (_compile_the_world_class_counter >= CompileTheWorldStartAt) {
- if (k.is_null() || exception_occurred) {
+ if (k == NULL || exception_occurred) {
// If something went wrong (e.g. ExceptionInInitializerError) we skip this class
tty->print_cr("CompileTheWorld (%d) : Skipping %s", _compile_the_world_class_counter, buffer);
} else {
@@ -1916,8 +1916,9 @@
// Preload all classes to get around uncommon traps
// Iterate over all methods in class
int comp_level = CompilationPolicy::policy()->initial_compile_level();
- for (int n = 0; n < k->methods()->length(); n++) {
- methodHandle m (THREAD, k->methods()->at(n));
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ for (int n = 0; n < ik->methods()->length(); n++) {
+ methodHandle m (THREAD, ik->methods()->at(n));
if (can_be_compiled(m, comp_level)) {
if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
// Give sweeper a chance to keep up with CTW
--- a/hotspot/src/share/vm/classfile/classLoader.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/classLoader.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -371,7 +371,7 @@
const char* const file_name, TRAPS);
// Load individual .class file
- static instanceKlassHandle load_class(Symbol* class_name, bool search_append_only, TRAPS);
+ static InstanceKlass* load_class(Symbol* class_name, bool search_append_only, TRAPS);
// If the specified package has been loaded by the system, then returns
// the name of the directory or ZIP file that the package was loaded from.
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -760,7 +760,7 @@
// Include the result of loader.toString() in the output. This allows
// the user of the log to identify the class loader instance.
JavaValue result(T_OBJECT);
- KlassHandle spec_klass(THREAD, SystemDictionary::ClassLoader_klass());
+ Klass* spec_klass = SystemDictionary::ClassLoader_klass();
JavaCalls::call_virtual(&result,
loader,
spec_klass,
--- a/hotspot/src/share/vm/classfile/classLoaderExt.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/classLoaderExt.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, 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
@@ -49,10 +49,10 @@
return false;
}
- instanceKlassHandle record_result(Symbol* class_name,
- ClassPathEntry* e,
- const s2 classpath_index,
- instanceKlassHandle result, TRAPS) {
+ InstanceKlass* record_result(Symbol* class_name,
+ ClassPathEntry* e,
+ const s2 classpath_index,
+ InstanceKlass* result, TRAPS) {
if (ClassLoader::add_package(_file_name, classpath_index, THREAD)) {
#if INCLUDE_CDS
if (DumpSharedSpaces) {
@@ -64,7 +64,7 @@
#endif
return result;
} else {
- return instanceKlassHandle(); // NULL
+ return NULL;
}
}
};
--- a/hotspot/src/share/vm/classfile/dictionary.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/dictionary.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -46,7 +46,7 @@
}
Dictionary::Dictionary(int table_size)
- : TwoOopHashtable<Klass*, mtClass>(table_size, (int)entry_size()) {
+ : TwoOopHashtable<InstanceKlass*, mtClass>(table_size, (int)entry_size()) {
_current_class_index = 0;
_current_class_entry = NULL;
_pd_cache_table = new ProtectionDomainCacheTable(defaultProtectionDomainCacheSize);
@@ -55,7 +55,7 @@
Dictionary::Dictionary(int table_size, HashtableBucket<mtClass>* t,
int number_of_entries)
- : TwoOopHashtable<Klass*, mtClass>(table_size, (int)entry_size(), t, number_of_entries) {
+ : TwoOopHashtable<InstanceKlass*, mtClass>(table_size, (int)entry_size(), t, number_of_entries) {
_current_class_index = 0;
_current_class_entry = NULL;
_pd_cache_table = new ProtectionDomainCacheTable(defaultProtectionDomainCacheSize);
@@ -65,9 +65,9 @@
return _pd_cache_table->get(protection_domain);
}
-DictionaryEntry* Dictionary::new_entry(unsigned int hash, Klass* klass,
+DictionaryEntry* Dictionary::new_entry(unsigned int hash, InstanceKlass* klass,
ClassLoaderData* loader_data) {
- DictionaryEntry* entry = (DictionaryEntry*)Hashtable<Klass*, mtClass>::new_entry(hash, klass);
+ DictionaryEntry* entry = (DictionaryEntry*)Hashtable<InstanceKlass*, mtClass>::new_entry(hash, klass);
entry->set_loader_data(loader_data);
entry->set_pd_set(NULL);
assert(klass->is_instance_klass(), "Must be");
@@ -85,7 +85,7 @@
entry->set_pd_set(to_delete->next());
delete to_delete;
}
- Hashtable<Klass*, mtClass>::free_entry(entry);
+ Hashtable<InstanceKlass*, mtClass>::free_entry(entry);
}
@@ -351,10 +351,10 @@
_pd_cache_table->unlink(is_alive);
}
-Klass* Dictionary::try_get_next_class() {
+InstanceKlass* Dictionary::try_get_next_class() {
while (true) {
if (_current_class_entry != NULL) {
- Klass* k = _current_class_entry->klass();
+ InstanceKlass* k = _current_class_entry->klass();
_current_class_entry = _current_class_entry->next();
return k;
}
@@ -371,15 +371,15 @@
// by the compilers.
void Dictionary::add_klass(Symbol* class_name, ClassLoaderData* loader_data,
- KlassHandle obj) {
+ InstanceKlass* obj) {
assert_locked_or_safepoint(SystemDictionary_lock);
- assert(obj() != NULL, "adding NULL obj");
- assert(obj()->name() == class_name, "sanity check on name");
+ assert(obj != NULL, "adding NULL obj");
+ assert(obj->name() == class_name, "sanity check on name");
assert(loader_data != NULL, "Must be non-NULL");
unsigned int hash = compute_hash(class_name, loader_data);
int index = hash_to_index(hash);
- DictionaryEntry* entry = new_entry(hash, obj(), loader_data);
+ DictionaryEntry* entry = new_entry(hash, obj, loader_data);
add_entry(index, entry);
}
@@ -410,8 +410,8 @@
}
-Klass* Dictionary::find(int index, unsigned int hash, Symbol* name,
- ClassLoaderData* loader_data, Handle protection_domain, TRAPS) {
+InstanceKlass* Dictionary::find(int index, unsigned int hash, Symbol* name,
+ ClassLoaderData* loader_data, Handle protection_domain, TRAPS) {
DictionaryEntry* entry = get_entry(index, hash, name, loader_data);
if (entry != NULL && entry->is_valid_protection_domain(protection_domain)) {
return entry->klass();
@@ -421,30 +421,30 @@
}
-Klass* Dictionary::find_class(int index, unsigned int hash,
- Symbol* name, ClassLoaderData* loader_data) {
+InstanceKlass* Dictionary::find_class(int index, unsigned int hash,
+ Symbol* name, ClassLoaderData* loader_data) {
assert_locked_or_safepoint(SystemDictionary_lock);
assert (index == index_for(name, loader_data), "incorrect index?");
DictionaryEntry* entry = get_entry(index, hash, name, loader_data);
- return (entry != NULL) ? entry->klass() : (Klass*)NULL;
+ return (entry != NULL) ? entry->klass() : NULL;
}
// Variant of find_class for shared classes. No locking required, as
// that table is static.
-Klass* Dictionary::find_shared_class(int index, unsigned int hash,
- Symbol* name) {
+InstanceKlass* Dictionary::find_shared_class(int index, unsigned int hash,
+ Symbol* name) {
assert (index == index_for(name, NULL), "incorrect index?");
DictionaryEntry* entry = get_entry(index, hash, name, NULL);
- return (entry != NULL) ? entry->klass() : (Klass*)NULL;
+ return (entry != NULL) ? entry->klass() : NULL;
}
void Dictionary::add_protection_domain(int index, unsigned int hash,
- instanceKlassHandle klass,
+ InstanceKlass* klass,
ClassLoaderData* loader_data, Handle protection_domain,
TRAPS) {
Symbol* klass_name = klass->name();
--- a/hotspot/src/share/vm/classfile/dictionary.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/dictionary.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -41,7 +41,7 @@
// The data structure for the system dictionary (and the shared system
// dictionary).
-class Dictionary : public TwoOopHashtable<Klass*, mtClass> {
+class Dictionary : public TwoOopHashtable<InstanceKlass*, mtClass> {
friend class VMStructs;
private:
// current iteration index.
@@ -56,16 +56,16 @@
protected:
DictionaryEntry* bucket(int i) const {
- return (DictionaryEntry*)Hashtable<Klass*, mtClass>::bucket(i);
+ return (DictionaryEntry*)Hashtable<InstanceKlass*, mtClass>::bucket(i);
}
// The following method is not MT-safe and must be done under lock.
DictionaryEntry** bucket_addr(int i) {
- return (DictionaryEntry**)Hashtable<Klass*, mtClass>::bucket_addr(i);
+ return (DictionaryEntry**)Hashtable<InstanceKlass*, mtClass>::bucket_addr(i);
}
void add_entry(int index, DictionaryEntry* new_entry) {
- Hashtable<Klass*, mtClass>::add_entry(index, (HashtableEntry<Klass*, mtClass>*)new_entry);
+ Hashtable<InstanceKlass*, mtClass>::add_entry(index, (HashtableEntry<InstanceKlass*, mtClass>*)new_entry);
}
static size_t entry_size();
@@ -73,21 +73,21 @@
Dictionary(int table_size);
Dictionary(int table_size, HashtableBucket<mtClass>* t, int number_of_entries);
- DictionaryEntry* new_entry(unsigned int hash, Klass* klass, ClassLoaderData* loader_data);
+ DictionaryEntry* new_entry(unsigned int hash, InstanceKlass* klass, ClassLoaderData* loader_data);
DictionaryEntry* new_entry();
void free_entry(DictionaryEntry* entry);
- void add_klass(Symbol* class_name, ClassLoaderData* loader_data,KlassHandle obj);
+ void add_klass(Symbol* class_name, ClassLoaderData* loader_data, InstanceKlass* obj);
- Klass* find_class(int index, unsigned int hash,
- Symbol* name, ClassLoaderData* loader_data);
+ InstanceKlass* find_class(int index, unsigned int hash,
+ Symbol* name, ClassLoaderData* loader_data);
- Klass* find_shared_class(int index, unsigned int hash, Symbol* name);
+ InstanceKlass* find_shared_class(int index, unsigned int hash, Symbol* name);
// Compiler support
- Klass* try_get_next_class();
+ InstanceKlass* try_get_next_class();
// GC support
void oops_do(OopClosure* f);
@@ -116,13 +116,13 @@
void do_unloading();
// Protection domains
- Klass* find(int index, unsigned int hash, Symbol* name,
- ClassLoaderData* loader_data, Handle protection_domain, TRAPS);
+ InstanceKlass* find(int index, unsigned int hash, Symbol* name,
+ ClassLoaderData* loader_data, Handle protection_domain, TRAPS);
bool is_valid_protection_domain(int index, unsigned int hash,
Symbol* name, ClassLoaderData* loader_data,
Handle protection_domain);
void add_protection_domain(int index, unsigned int hash,
- instanceKlassHandle klass, ClassLoaderData* loader_data,
+ InstanceKlass* klass, ClassLoaderData* loader_data,
Handle protection_domain, TRAPS);
// Sharing support
@@ -243,9 +243,9 @@
};
// An entry in the system dictionary, this describes a class as
-// { Klass*, loader, protection_domain }.
+// { InstanceKlass*, loader, protection_domain }.
-class DictionaryEntry : public HashtableEntry<Klass*, mtClass> {
+class DictionaryEntry : public HashtableEntry<InstanceKlass*, mtClass> {
friend class VMStructs;
private:
// Contains the set of approved protection domains that can access
@@ -277,15 +277,15 @@
// Adds a protection domain to the approved set.
void add_protection_domain(Dictionary* dict, Handle protection_domain);
- Klass* klass() const { return (Klass*)literal(); }
- Klass** klass_addr() { return (Klass**)literal_addr(); }
+ InstanceKlass* klass() const { return (InstanceKlass*)literal(); }
+ InstanceKlass** klass_addr() { return (InstanceKlass**)literal_addr(); }
DictionaryEntry* next() const {
- return (DictionaryEntry*)HashtableEntry<Klass*, mtClass>::next();
+ return (DictionaryEntry*)HashtableEntry<InstanceKlass*, mtClass>::next();
}
DictionaryEntry** next_addr() {
- return (DictionaryEntry**)HashtableEntry<Klass*, mtClass>::next_addr();
+ return (DictionaryEntry**)HashtableEntry<InstanceKlass*, mtClass>::next_addr();
}
ClassLoaderData* loader_data() const { return _loader_data; }
@@ -323,7 +323,7 @@
}
bool equals(const Symbol* class_name, ClassLoaderData* loader_data) const {
- Klass* klass = (Klass*)literal();
+ InstanceKlass* klass = (InstanceKlass*)literal();
return (klass->name() == class_name && _loader_data == loader_data);
}
--- a/hotspot/src/share/vm/classfile/javaAssertions.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/javaAssertions.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -96,7 +96,7 @@
oop JavaAssertions::createAssertionStatusDirectives(TRAPS) {
Symbol* asd_sym = vmSymbols::java_lang_AssertionStatusDirectives();
Klass* k = SystemDictionary::resolve_or_fail(asd_sym, true, CHECK_NULL);
- instanceKlassHandle asd_klass (THREAD, k);
+ InstanceKlass* asd_klass = InstanceKlass::cast(k);
asd_klass->initialize(CHECK_NULL);
Handle h = asd_klass->allocate_instance_handle(CHECK_NULL);
--- a/hotspot/src/share/vm/classfile/javaClasses.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/javaClasses.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -735,7 +735,7 @@
}
-void java_lang_Class::fixup_mirror(KlassHandle k, TRAPS) {
+void java_lang_Class::fixup_mirror(Klass* k, TRAPS) {
assert(InstanceMirrorKlass::offset_of_static_fields() != 0, "must have been computed already");
// If the offset was read from the shared archive, it was fixed up already
@@ -744,7 +744,7 @@
// During bootstrap, java.lang.Class wasn't loaded so static field
// offsets were computed without the size added it. Go back and
// update all the static field offsets to included the size.
- for (JavaFieldStream fs(InstanceKlass::cast(k())); !fs.done(); fs.next()) {
+ for (JavaFieldStream fs(InstanceKlass::cast(k)); !fs.done(); fs.next()) {
if (fs.access_flags().is_static()) {
int real_offset = fs.offset() + InstanceMirrorKlass::offset_of_static_fields();
fs.set_offset(real_offset);
@@ -755,7 +755,7 @@
create_mirror(k, Handle(), Handle(), Handle(), CHECK);
}
-void java_lang_Class::initialize_mirror_fields(KlassHandle k,
+void java_lang_Class::initialize_mirror_fields(Klass* k,
Handle mirror,
Handle protection_domain,
TRAPS) {
@@ -769,11 +769,11 @@
set_protection_domain(mirror(), protection_domain());
// Initialize static fields
- InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, mirror, CHECK);
+ InstanceKlass::cast(k)->do_local_static_fields(&initialize_static_field, mirror, CHECK);
}
// Set the java.lang.reflect.Module module field in the java_lang_Class mirror
-void java_lang_Class::set_mirror_module_field(KlassHandle k, Handle mirror, Handle module, TRAPS) {
+void java_lang_Class::set_mirror_module_field(Klass* k, Handle mirror, Handle module, TRAPS) {
if (module.is_null()) {
// During startup, the module may be NULL only if java.base has not been defined yet.
// Put the class on the fixup_module_list to patch later when the java.lang.reflect.Module
@@ -791,7 +791,7 @@
set_fixup_module_field_list(list);
}
k->class_loader_data()->inc_keep_alive();
- fixup_module_field_list()->push(k());
+ fixup_module_field_list()->push(k);
} else {
javabase_was_defined = true;
}
@@ -814,7 +814,7 @@
}
}
-void java_lang_Class::create_mirror(KlassHandle k, Handle class_loader,
+void java_lang_Class::create_mirror(Klass* k, Handle class_loader,
Handle module, Handle protection_domain, TRAPS) {
assert(k->java_mirror() == NULL, "should only assign mirror once");
// Use this moment of initialization to cache modifier_flags also,
@@ -831,8 +831,8 @@
Handle mirror(THREAD, mirror_oop);
// Setup indirection from mirror->klass
- if (!k.is_null()) {
- java_lang_Class::set_klass(mirror(), k());
+ if (k != NULL) {
+ java_lang_Class::set_klass(mirror(), k);
}
InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass());
@@ -844,11 +844,11 @@
if (k->is_array_klass()) {
oop comp_mirror;
if (k->is_typeArray_klass()) {
- BasicType type = TypeArrayKlass::cast(k())->element_type();
+ BasicType type = TypeArrayKlass::cast(k)->element_type();
comp_mirror = Universe::java_mirror(type);
} else {
assert(k->is_objArray_klass(), "Must be");
- Klass* element_klass = ObjArrayKlass::cast(k())->element_klass();
+ Klass* element_klass = ObjArrayKlass::cast(k)->element_klass();
assert(element_klass != NULL, "Must have an element klass");
comp_mirror = element_klass->java_mirror();
}
@@ -857,7 +857,7 @@
// Two-way link between the array klass and its component mirror:
// (array_klass) k -> mirror -> component_mirror -> array_klass -> k
set_component_mirror(mirror(), comp_mirror);
- set_array_klass(comp_mirror, k());
+ set_array_klass(comp_mirror, k);
} else {
assert(k->is_instance_klass(), "Must be");
@@ -881,7 +881,7 @@
// Setup indirection from klass->mirror last
// after any exceptions can happen during allocations.
- if (!k.is_null()) {
+ if (k != NULL) {
k->set_java_mirror(mirror());
}
} else {
@@ -890,11 +890,11 @@
new (ResourceObj::C_HEAP, mtClass) GrowableArray<Klass*>(40, true);
set_fixup_mirror_list(list);
}
- fixup_mirror_list()->push(k());
+ fixup_mirror_list()->push(k);
}
}
-void java_lang_Class::fixup_module_field(KlassHandle k, Handle module) {
+void java_lang_Class::fixup_module_field(Klass* k, Handle module) {
assert(_module_offset != 0, "must have been computed already");
java_lang_Class::set_module(k->java_mirror(), module());
}
@@ -1876,7 +1876,7 @@
JavaValue cause(T_OBJECT);
JavaCalls::call_virtual(&cause,
throwable,
- KlassHandle(THREAD, throwable->klass()),
+ throwable->klass(),
vmSymbols::getCause_name(),
vmSymbols::void_throwable_signature(),
THREAD);
@@ -1904,7 +1904,7 @@
JavaValue result(T_VOID);
JavaCalls::call_virtual(&result,
throwable,
- KlassHandle(THREAD, SystemDictionary::Throwable_klass()),
+ SystemDictionary::Throwable_klass(),
vmSymbols::printStackTrace_name(),
vmSymbols::void_method_signature(),
THREAD);
@@ -2153,14 +2153,13 @@
oop java_lang_StackTraceElement::create(const methodHandle& method, int bci, TRAPS) {
// Allocate java.lang.StackTraceElement instance
- Klass* k = SystemDictionary::StackTraceElement_klass();
+ InstanceKlass* k = SystemDictionary::StackTraceElement_klass();
assert(k != NULL, "must be loaded in 1.4+");
- instanceKlassHandle ik (THREAD, k);
- if (ik->should_be_initialized()) {
- ik->initialize(CHECK_0);
+ if (k->should_be_initialized()) {
+ k->initialize(CHECK_0);
}
- Handle element = ik->allocate_instance_handle(CHECK_0);
+ Handle element = k->allocate_instance_handle(CHECK_0);
int version = method->constants()->version();
fill_in(element, method->method_holder(), method, version, bci, method->name(), CHECK_0);
@@ -2489,10 +2488,10 @@
assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
Symbol* name = vmSymbols::java_lang_reflect_Constructor();
Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH);
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// Ensure it is initialized
- klass->initialize(CHECK_NH);
- return klass->allocate_instance_handle(THREAD);
+ ik->initialize(CHECK_NH);
+ return ik->allocate_instance_handle(THREAD);
}
oop java_lang_reflect_Constructor::clazz(oop reflect) {
@@ -2629,10 +2628,10 @@
assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
Symbol* name = vmSymbols::java_lang_reflect_Field();
Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH);
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// Ensure it is initialized
- klass->initialize(CHECK_NH);
- return klass->allocate_instance_handle(THREAD);
+ ik->initialize(CHECK_NH);
+ return ik->allocate_instance_handle(THREAD);
}
oop java_lang_reflect_Field::clazz(oop reflect) {
@@ -2756,10 +2755,10 @@
assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
Symbol* name = vmSymbols::java_lang_reflect_Parameter();
Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH);
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// Ensure it is initialized
- klass->initialize(CHECK_NH);
- return klass->allocate_instance_handle(THREAD);
+ ik->initialize(CHECK_NH);
+ return ik->allocate_instance_handle(THREAD);
}
oop java_lang_reflect_Parameter::name(oop param) {
@@ -2812,11 +2811,10 @@
Symbol* name = vmSymbols::java_lang_reflect_Module();
Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH);
- instanceKlassHandle klass (THREAD, k);
-
- Handle jlrmh = klass->allocate_instance_handle(CHECK_NH);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ Handle jlrmh = ik->allocate_instance_handle(CHECK_NH);
JavaValue result(T_VOID);
- JavaCalls::call_special(&result, jlrmh, KlassHandle(THREAD, klass()),
+ JavaCalls::call_special(&result, jlrmh, ik,
vmSymbols::object_initializer_name(),
vmSymbols::java_lang_reflect_module_init_signature(),
loader, module_name, CHECK_NH);
@@ -2879,11 +2877,10 @@
Handle reflect_ConstantPool::create(TRAPS) {
assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
- Klass* k = SystemDictionary::reflect_ConstantPool_klass();
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* k = SystemDictionary::reflect_ConstantPool_klass();
// Ensure it is initialized
- klass->initialize(CHECK_NH);
- return klass->allocate_instance_handle(THREAD);
+ k->initialize(CHECK_NH);
+ return k->allocate_instance_handle(THREAD);
}
@@ -2921,9 +2918,9 @@
oop java_lang_boxing_object::initialize_and_allocate(BasicType type, TRAPS) {
Klass* k = SystemDictionary::box_klass(type);
if (k == NULL) return NULL;
- instanceKlassHandle h (THREAD, k);
- if (!h->is_initialized()) h->initialize(CHECK_0);
- return h->allocate_instance(THREAD);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ if (!ik->is_initialized()) ik->initialize(CHECK_0);
+ return ik->allocate_instance(THREAD);
}
@@ -3894,10 +3891,10 @@
fieldDescriptor fd;
TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
- instanceKlassHandle h_klass (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH);
- if (!h_klass->find_local_field(f_name, f_sig, &fd)) {
+ if (!ik->find_local_field(f_name, f_sig, &fd)) {
tty->print_cr("Nonstatic field %s.%s not found", klass_name, field_name);
return false;
}
@@ -3920,10 +3917,10 @@
fieldDescriptor fd;
TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
- instanceKlassHandle h_klass (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH);
- if (!h_klass->find_local_field(f_name, f_sig, &fd)) {
+ if (!ik->find_local_field(f_name, f_sig, &fd)) {
tty->print_cr("Static field %s.%s not found", klass_name, field_name);
return false;
}
@@ -3945,10 +3942,10 @@
fieldDescriptor fd;
TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH);
Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH);
- instanceKlassHandle h_klass (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH);
TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH);
- if (!h_klass->find_local_field(f_name, f_sig, &fd)) {
+ if (!ik->find_local_field(f_name, f_sig, &fd)) {
tty->print_cr("Static field %s.%s not found", klass_name, field_name);
return false;
}
--- a/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/javaClasses.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -209,29 +209,23 @@
static void set_protection_domain(oop java_class, oop protection_domain);
static void set_class_loader(oop java_class, oop class_loader);
static void set_component_mirror(oop java_class, oop comp_mirror);
- static void initialize_mirror_fields(KlassHandle k, Handle mirror, Handle protection_domain, TRAPS);
- static void set_mirror_module_field(KlassHandle K, Handle mirror, Handle module, TRAPS);
+ static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain, TRAPS);
+ static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
public:
static void compute_offsets();
// Instance creation
- static void create_mirror(KlassHandle k, Handle class_loader, Handle module,
+ static void create_mirror(Klass* k, Handle class_loader, Handle module,
Handle protection_domain, TRAPS);
- static void fixup_mirror(KlassHandle k, TRAPS);
+ static void fixup_mirror(Klass* k, TRAPS);
static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
- static void fixup_module_field(KlassHandle k, Handle module);
+ static void fixup_module_field(Klass* k, Handle module);
// Conversion
static Klass* as_Klass(oop java_class);
static void set_klass(oop java_class, Klass* klass);
static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL);
- static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) {
- Klass* refk_oop = NULL;
- BasicType result = as_BasicType(java_class, &refk_oop);
- (*reference_klass) = KlassHandle(refk_oop);
- return result;
- }
static Symbol* as_signature(oop java_class, bool intern_if_not_found, TRAPS);
static void print_signature(oop java_class, outputStream *st);
static const char* as_external_name(oop java_class);
--- a/hotspot/src/share/vm/classfile/klassFactory.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/klassFactory.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+* Copyright (c) 2015, 2017, 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
@@ -37,14 +37,14 @@
#include "trace/traceMacros.hpp"
// called during initial loading of a shared class
-instanceKlassHandle KlassFactory::check_shared_class_file_load_hook(
- instanceKlassHandle ik,
+InstanceKlass* KlassFactory::check_shared_class_file_load_hook(
+ InstanceKlass* ik,
Symbol* class_name,
Handle class_loader,
Handle protection_domain, TRAPS) {
#if INCLUDE_CDS && INCLUDE_JVMTI
- assert(ik.not_null(), "sanity");
- assert(ik()->is_shared(), "expecting a shared class");
+ assert(ik != NULL, "sanity");
+ assert(ik->is_shared(), "expecting a shared class");
if (JvmtiExport::should_post_class_file_load_hook()) {
assert(THREAD->is_Java_thread(), "must be JavaThread");
@@ -84,8 +84,8 @@
NULL,
ClassFileParser::BROADCAST, // publicity level
CHECK_NULL);
- instanceKlassHandle new_ik = parser.create_instance_klass(true /* changed_by_loadhook */,
- CHECK_NULL);
+ InstanceKlass* new_ik = parser.create_instance_klass(true /* changed_by_loadhook */,
+ CHECK_NULL);
if (cached_class_file != NULL) {
new_ik->set_cached_class_file(cached_class_file);
}
@@ -128,14 +128,11 @@
JvmtiThreadState* state = jt->jvmti_thread_state();
if (state != NULL) {
- KlassHandle* h_class_being_redefined =
- state->get_class_being_redefined();
+ Klass* k = state->get_class_being_redefined();
- if (h_class_being_redefined != NULL) {
- instanceKlassHandle ikh_class_being_redefined =
- instanceKlassHandle(THREAD, (*h_class_being_redefined)());
-
- *cached_class_file = ikh_class_being_redefined->get_cached_class_file();
+ if (k != NULL) {
+ InstanceKlass* class_being_redefined = InstanceKlass::cast(k);
+ *cached_class_file = class_being_redefined->get_cached_class_file();
}
}
@@ -163,13 +160,13 @@
}
-instanceKlassHandle KlassFactory::create_from_stream(ClassFileStream* stream,
- Symbol* name,
- ClassLoaderData* loader_data,
- Handle protection_domain,
- const InstanceKlass* host_klass,
- GrowableArray<Handle>* cp_patches,
- TRAPS) {
+InstanceKlass* KlassFactory::create_from_stream(ClassFileStream* stream,
+ Symbol* name,
+ ClassLoaderData* loader_data,
+ Handle protection_domain,
+ const InstanceKlass* host_klass,
+ GrowableArray<Handle>* cp_patches,
+ TRAPS) {
assert(stream != NULL, "invariant");
assert(loader_data != NULL, "invariant");
assert(THREAD->is_Java_thread(), "must be a JavaThread");
@@ -200,10 +197,10 @@
ClassFileParser::BROADCAST, // publicity level
CHECK_NULL);
- instanceKlassHandle result = parser.create_instance_klass(old_stream != stream, CHECK_NULL);
+ InstanceKlass* result = parser.create_instance_klass(old_stream != stream, CHECK_NULL);
assert(result == parser.create_instance_klass(old_stream != stream, THREAD), "invariant");
- if (result.is_null()) {
+ if (result == NULL) {
return NULL;
}
--- a/hotspot/src/share/vm/classfile/klassFactory.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/klassFactory.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+* Copyright (c) 2015, 2017, 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
@@ -68,16 +68,16 @@
friend class SystemDictionary;
private:
- static instanceKlassHandle create_from_stream(ClassFileStream* stream,
- Symbol* name,
- ClassLoaderData* loader_data,
- Handle protection_domain,
- const InstanceKlass* host_klass,
- GrowableArray<Handle>* cp_patches,
- TRAPS);
+ static InstanceKlass* create_from_stream(ClassFileStream* stream,
+ Symbol* name,
+ ClassLoaderData* loader_data,
+ Handle protection_domain,
+ const InstanceKlass* host_klass,
+ GrowableArray<Handle>* cp_patches,
+ TRAPS);
public:
- static instanceKlassHandle check_shared_class_file_load_hook(
- instanceKlassHandle ik,
+ static InstanceKlass* check_shared_class_file_load_hook(
+ InstanceKlass* ik,
Symbol* class_name,
Handle class_loader,
Handle protection_domain, TRAPS);
--- a/hotspot/src/share/vm/classfile/loaderConstraints.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/loaderConstraints.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -36,15 +36,15 @@
}
LoaderConstraintTable::LoaderConstraintTable(int nof_buckets)
- : Hashtable<Klass*, mtClass>(nof_buckets, sizeof(LoaderConstraintEntry)) {};
+ : Hashtable<InstanceKlass*, mtClass>(nof_buckets, sizeof(LoaderConstraintEntry)) {};
LoaderConstraintEntry* LoaderConstraintTable::new_entry(
unsigned int hash, Symbol* name,
- Klass* klass, int num_loaders,
+ InstanceKlass* klass, int num_loaders,
int max_loaders) {
LoaderConstraintEntry* entry;
- entry = (LoaderConstraintEntry*)Hashtable<Klass*, mtClass>::new_entry(hash, klass);
+ entry = (LoaderConstraintEntry*)Hashtable<InstanceKlass*, mtClass>::new_entry(hash, klass);
entry->set_name(name);
entry->set_num_loaders(num_loaders);
entry->set_max_loaders(max_loaders);
@@ -54,7 +54,7 @@
void LoaderConstraintTable::free_entry(LoaderConstraintEntry *entry) {
// decrement name refcount before freeing
entry->name()->decrement_refcount();
- Hashtable<Klass*, mtClass>::free_entry(entry);
+ Hashtable<InstanceKlass*, mtClass>::free_entry(entry);
}
// Enhanced Class Redefinition support
@@ -106,7 +106,7 @@
LoaderConstraintEntry** p = bucket_addr(index);
while(*p) {
LoaderConstraintEntry* probe = *p;
- Klass* klass = probe->klass();
+ InstanceKlass* klass = probe->klass();
// Remove klass that is no longer alive
if (klass != NULL &&
klass->class_loader_data()->is_unloading()) {
@@ -186,14 +186,14 @@
}
bool LoaderConstraintTable::add_entry(Symbol* class_name,
- Klass* klass1, Handle class_loader1,
- Klass* klass2, Handle class_loader2) {
+ InstanceKlass* klass1, Handle class_loader1,
+ InstanceKlass* klass2, Handle class_loader2) {
int failure_code = 0; // encode different reasons for failing
if (klass1 != NULL && klass2 != NULL && klass1 != klass2) {
failure_code = 1;
} else {
- Klass* klass = klass1 != NULL ? klass1 : klass2;
+ InstanceKlass* klass = klass1 != NULL ? klass1 : klass2;
LoaderConstraintEntry** pp1 = find_loader_constraint(class_name,
class_loader1);
@@ -295,11 +295,11 @@
// return true if the constraint was updated, false if the constraint is
// violated
-bool LoaderConstraintTable::check_or_update(instanceKlassHandle k,
- Handle loader,
- Symbol* name) {
+bool LoaderConstraintTable::check_or_update(InstanceKlass* k,
+ Handle loader,
+ Symbol* name) {
LoaderConstraintEntry* p = *(find_loader_constraint(name, loader));
- if (p && p->klass() != NULL && p->klass() != k()) {
+ if (p && p->klass() != NULL && p->klass() != k) {
if (log_is_enabled(Info, class, loader, constraints)) {
ResourceMark rm;
outputStream* out = Log(class, loader, constraints)::info_stream();
@@ -311,7 +311,7 @@
return false;
} else {
if (p && p->klass() == NULL) {
- p->set_klass(k());
+ p->set_klass(k);
if (log_is_enabled(Info, class, loader, constraints)) {
ResourceMark rm;
outputStream* out = Log(class, loader, constraints)::info_stream();
@@ -325,11 +325,12 @@
}
}
-Klass* LoaderConstraintTable::find_constrained_klass(Symbol* name,
+InstanceKlass* LoaderConstraintTable::find_constrained_klass(Symbol* name,
Handle loader) {
LoaderConstraintEntry *p = *(find_loader_constraint(name, loader));
if (p != NULL && p->klass() != NULL) {
- if (p->klass()->is_instance_klass() && !InstanceKlass::cast(p->klass())->is_loaded()) {
+ assert(p->klass()->is_instance_klass(), "sanity");
+ if (p->klass()->is_loaded()) {
// Only return fully loaded classes. Classes found through the
// constraints might still be in the process of loading.
return NULL;
@@ -357,7 +358,7 @@
void LoaderConstraintTable::extend_loader_constraint(LoaderConstraintEntry* p,
Handle loader,
- Klass* klass) {
+ InstanceKlass* klass) {
ensure_loader_constraint_capacity(p, 1);
int num = p->num_loaders();
p->set_loader(num, loader());
@@ -383,7 +384,7 @@
void LoaderConstraintTable::merge_loader_constraints(
LoaderConstraintEntry** pp1,
LoaderConstraintEntry** pp2,
- Klass* klass) {
+ InstanceKlass* klass) {
// make sure *pp1 has higher capacity
if ((*pp1)->max_loaders() < (*pp2)->max_loaders()) {
LoaderConstraintEntry** tmp = pp2;
@@ -447,13 +448,13 @@
probe != NULL;
probe = probe->next()) {
if (probe->klass() != NULL) {
- InstanceKlass* ik = InstanceKlass::cast(probe->klass());
+ InstanceKlass* ik = probe->klass();
guarantee(ik->name() == probe->name(), "name should match");
Symbol* name = ik->name();
ClassLoaderData* loader_data = ik->class_loader_data();
unsigned int d_hash = dictionary->compute_hash(name, loader_data);
int d_index = dictionary->hash_to_index(d_hash);
- Klass* k = dictionary->find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* k = dictionary->find_class(d_index, d_hash, name, loader_data);
if (k != NULL) {
// We found the class in the system dictionary, so we should
// make sure that the Klass* matches what we already have.
--- a/hotspot/src/share/vm/classfile/loaderConstraints.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/loaderConstraints.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -32,7 +32,7 @@
class LoaderConstraintEntry;
class Symbol;
-class LoaderConstraintTable : public Hashtable<Klass*, mtClass> {
+class LoaderConstraintTable : public Hashtable<InstanceKlass*, mtClass> {
friend class VMStructs;
private:
@@ -49,43 +49,41 @@
LoaderConstraintTable(int nof_buckets);
LoaderConstraintEntry* new_entry(unsigned int hash, Symbol* name,
- Klass* klass, int num_loaders,
+ InstanceKlass* klass, int num_loaders,
int max_loaders);
void free_entry(LoaderConstraintEntry *entry);
LoaderConstraintEntry* bucket(int i) {
- return (LoaderConstraintEntry*)Hashtable<Klass*, mtClass>::bucket(i);
+ return (LoaderConstraintEntry*)Hashtable<InstanceKlass*, mtClass>::bucket(i);
}
LoaderConstraintEntry** bucket_addr(int i) {
- return (LoaderConstraintEntry**)Hashtable<Klass*, mtClass>::bucket_addr(i);
+ return (LoaderConstraintEntry**)Hashtable<InstanceKlass*, mtClass>::bucket_addr(i);
}
// Enhanced Class Redefinition support
void classes_do(KlassClosure* f);
// Check class loader constraints
- bool add_entry(Symbol* name, Klass* klass1, Handle loader1,
- Klass* klass2, Handle loader2);
+ bool add_entry(Symbol* name, InstanceKlass* klass1, Handle loader1,
+ InstanceKlass* klass2, Handle loader2);
// Note: The main entry point for this module is via SystemDictionary.
// SystemDictionary::check_signature_loaders(Symbol* signature,
// Handle loader1, Handle loader2,
// bool is_method, TRAPS)
- Klass* find_constrained_klass(Symbol* name, Handle loader);
+ InstanceKlass* find_constrained_klass(Symbol* name, Handle loader);
// Class loader constraints
void ensure_loader_constraint_capacity(LoaderConstraintEntry *p, int nfree);
void extend_loader_constraint(LoaderConstraintEntry* p, Handle loader,
- Klass* klass);
+ InstanceKlass* klass);
void merge_loader_constraints(LoaderConstraintEntry** pp1,
- LoaderConstraintEntry** pp2, Klass* klass);
+ LoaderConstraintEntry** pp2, InstanceKlass* klass);
- bool check_or_update(instanceKlassHandle k, Handle loader,
- Symbol* name);
-
+ bool check_or_update(InstanceKlass* k, Handle loader, Symbol* name);
void purge_loader_constraints();
@@ -95,7 +93,7 @@
#endif
};
-class LoaderConstraintEntry : public HashtableEntry<Klass*, mtClass> {
+class LoaderConstraintEntry : public HashtableEntry<InstanceKlass*, mtClass> {
friend class VMStructs;
private:
Symbol* _name; // class name
@@ -108,19 +106,19 @@
public:
- Klass* klass() { return literal(); }
- Klass** klass_addr() { return literal_addr(); }
- void set_klass(Klass* k) { set_literal(k); }
+ InstanceKlass* klass() { return literal(); }
+ InstanceKlass** klass_addr() { return literal_addr(); }
+ void set_klass(InstanceKlass* k) { set_literal(k); }
LoaderConstraintEntry* next() {
- return (LoaderConstraintEntry*)HashtableEntry<Klass*, mtClass>::next();
+ return (LoaderConstraintEntry*)HashtableEntry<InstanceKlass*, mtClass>::next();
}
LoaderConstraintEntry** next_addr() {
- return (LoaderConstraintEntry**)HashtableEntry<Klass*, mtClass>::next_addr();
+ return (LoaderConstraintEntry**)HashtableEntry<InstanceKlass*, mtClass>::next_addr();
}
void set_next(LoaderConstraintEntry* next) {
- HashtableEntry<Klass*, mtClass>::set_next(next);
+ HashtableEntry<InstanceKlass*, mtClass>::set_next(next);
}
Symbol* name() { return _name; }
--- a/hotspot/src/share/vm/classfile/moduleEntry.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/moduleEntry.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -428,7 +428,7 @@
for (int i = 0; i < list_length; i++) {
Klass* k = list->at(i);
assert(k->is_klass(), "List should only hold classes");
- java_lang_Class::fixup_module_field(KlassHandle(k), module_handle);
+ java_lang_Class::fixup_module_field(k, module_handle);
k->class_loader_data()->dec_keep_alive();
}
--- a/hotspot/src/share/vm/classfile/placeholders.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/placeholders.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -163,7 +163,7 @@
bool _havesupername; // distinguish between null supername, and unknown
Symbol* _supername;
Thread* _definer; // owner of define token
- Klass* _instanceKlass; // InstanceKlass from successful define
+ InstanceKlass* _instanceKlass; // InstanceKlass from successful define
SeenThread* _superThreadQ; // doubly-linked queue of Threads loading a superclass for this class
SeenThread* _loadInstanceThreadQ; // loadInstance thread
// can be multiple threads if classloader object lock broken by application
@@ -193,8 +193,8 @@
Thread* definer() const {return _definer; }
void set_definer(Thread* definer) { _definer = definer; }
- Klass* instance_klass() const {return _instanceKlass; }
- void set_instance_klass(Klass* ik) { _instanceKlass = ik; }
+ InstanceKlass* instance_klass() const {return _instanceKlass; }
+ void set_instance_klass(InstanceKlass* ik) { _instanceKlass = ik; }
SeenThread* superThreadQ() const { return _superThreadQ; }
void set_superThreadQ(SeenThread* SeenThread) { _superThreadQ = SeenThread; }
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -120,10 +120,10 @@
}
void SystemDictionary::compute_java_system_loader(TRAPS) {
- KlassHandle system_klass(THREAD, WK_KLASS(ClassLoader_klass));
+ Klass* system_klass = WK_KLASS(ClassLoader_klass);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,
- KlassHandle(THREAD, WK_KLASS(ClassLoader_klass)),
+ WK_KLASS(ClassLoader_klass),
vmSymbols::getSystemClassLoader_name(),
vmSymbols::void_classloader_signature(),
CHECK);
@@ -184,16 +184,15 @@
Klass* SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) {
Klass* klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD);
if (HAS_PENDING_EXCEPTION || klass == NULL) {
- KlassHandle k_h(THREAD, klass);
// can return a null klass
- klass = handle_resolution_exception(class_name, throw_error, k_h, THREAD);
+ klass = handle_resolution_exception(class_name, throw_error, klass, THREAD);
}
return klass;
}
Klass* SystemDictionary::handle_resolution_exception(Symbol* class_name,
bool throw_error,
- KlassHandle klass_h, TRAPS) {
+ Klass* klass, TRAPS) {
if (HAS_PENDING_EXCEPTION) {
// If we have a pending exception we forward it to the caller, unless throw_error is true,
// in which case we have to check whether the pending exception is a ClassNotFoundException,
@@ -201,7 +200,7 @@
// And chain the original ClassNotFoundException
if (throw_error && PENDING_EXCEPTION->is_a(SystemDictionary::ClassNotFoundException_klass())) {
ResourceMark rm(THREAD);
- assert(klass_h() == NULL, "Should not have result with exception pending");
+ assert(klass == NULL, "Should not have result with exception pending");
Handle e(THREAD, PENDING_EXCEPTION);
CLEAR_PENDING_EXCEPTION;
THROW_MSG_CAUSE_NULL(vmSymbols::java_lang_NoClassDefFoundError(), class_name->as_C_string(), e);
@@ -210,7 +209,7 @@
}
}
// Class not found, throw appropriate error or exception depending on value of throw_error
- if (klass_h() == NULL) {
+ if (klass == NULL) {
ResourceMark rm(THREAD);
if (throw_error) {
THROW_MSG_NULL(vmSymbols::java_lang_NoClassDefFoundError(), class_name->as_C_string());
@@ -218,7 +217,7 @@
THROW_MSG_NULL(vmSymbols::java_lang_ClassNotFoundException(), class_name->as_C_string());
}
}
- return (Klass*)klass_h();
+ return klass;
}
@@ -256,9 +255,9 @@
// Forwards to resolve_instance_class_or_null
Klass* SystemDictionary::resolve_array_class_or_null(Symbol* class_name,
- Handle class_loader,
- Handle protection_domain,
- TRAPS) {
+ Handle class_loader,
+ Handle protection_domain,
+ TRAPS) {
assert(FieldType::is_array(class_name), "must be array");
Klass* k = NULL;
FieldArrayInfo fd;
@@ -398,11 +397,9 @@
assert(class_name != NULL, "null super class for resolving");
// Resolve the super class or interface, check results on return
Klass* superk = SystemDictionary::resolve_or_null(class_name,
- class_loader,
- protection_domain,
- THREAD);
-
- KlassHandle superk_h(THREAD, superk);
+ class_loader,
+ protection_domain,
+ THREAD);
// Clean up of placeholders moved so that each classloadAction registrar self-cleans up
// It is no longer necessary to keep the placeholder table alive until update_dictionary
@@ -415,15 +412,15 @@
placeholders()->find_and_remove(p_index, p_hash, child_name, loader_data, PlaceholderTable::LOAD_SUPER, THREAD);
SystemDictionary_lock->notify_all();
}
- if (HAS_PENDING_EXCEPTION || superk_h() == NULL) {
+ if (HAS_PENDING_EXCEPTION || superk == NULL) {
// can null superk
- superk_h = KlassHandle(THREAD, handle_resolution_exception(class_name, true, superk_h, THREAD));
+ superk = handle_resolution_exception(class_name, true, superk, THREAD);
}
- return superk_h();
+ return superk;
}
-void SystemDictionary::validate_protection_domain(instanceKlassHandle klass,
+void SystemDictionary::validate_protection_domain(InstanceKlass* klass,
Handle class_loader,
Handle protection_domain,
TRAPS) {
@@ -438,11 +435,11 @@
log->print_cr("Checking package access");
log->print("class loader: "); class_loader()->print_value_on(log);
log->print(" protection domain: "); protection_domain()->print_value_on(log);
- log->print(" loading: "); klass()->print_value_on(log);
+ log->print(" loading: "); klass->print_value_on(log);
log->cr();
}
- KlassHandle system_loader(THREAD, SystemDictionary::ClassLoader_klass());
+ InstanceKlass* system_loader = SystemDictionary::ClassLoader_klass();
JavaCalls::call_special(&result,
class_loader,
system_loader,
@@ -540,11 +537,10 @@
// Returns non-null Klass* if other thread has completed load
// and we are done,
// If return null Klass* and no pending exception, the caller must load the class
-instanceKlassHandle SystemDictionary::handle_parallel_super_load(
+InstanceKlass* SystemDictionary::handle_parallel_super_load(
Symbol* name, Symbol* superclassname, Handle class_loader,
Handle protection_domain, Handle lockObject, TRAPS) {
- instanceKlassHandle nh = instanceKlassHandle(); // null Handle
ClassLoaderData* loader_data = class_loader_data(class_loader);
unsigned int d_hash = dictionary()->compute_hash(name, loader_data);
int d_index = dictionary()->hash_to_index(d_hash);
@@ -564,20 +560,14 @@
class_loader,
protection_domain,
true,
- CHECK_(nh));
+ CHECK_NULL);
// parallelCapable class loaders do NOT wait for parallel superclass loads to complete
// Serial class loaders and bootstrap classloader do wait for superclass loads
if (!class_loader.is_null() && is_parallelCapable(class_loader)) {
MutexLocker mu(SystemDictionary_lock, THREAD);
// Check if classloading completed while we were loading superclass or waiting
- Klass* check = find_class(d_index, d_hash, name, loader_data);
- if (check != NULL) {
- // Klass is already loaded, so just return it
- return(instanceKlassHandle(THREAD, check));
- } else {
- return nh;
- }
+ return find_class(d_index, d_hash, name, loader_data);
}
// must loop to both handle other placeholder updates
@@ -587,10 +577,10 @@
while (super_load_in_progress) {
MutexLocker mu(SystemDictionary_lock, THREAD);
// Check if classloading completed while we were loading superclass or waiting
- Klass* check = find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name, loader_data);
if (check != NULL) {
// Klass is already loaded, so just return it
- return(instanceKlassHandle(THREAD, check));
+ return check;
} else {
placeholder = placeholders()->get_entry(p_index, p_hash, name, loader_data);
if (placeholder && placeholder->super_load_in_progress() ){
@@ -619,17 +609,17 @@
}
}
}
- return (nh);
+ return NULL;
}
static void post_class_load_event(const Ticks& start_time,
- instanceKlassHandle k,
+ InstanceKlass* k,
const ClassLoaderData* init_cld) {
#if INCLUDE_TRACE
EventClassLoad event(UNTIMED);
if (event.should_commit()) {
event.set_starttime(start_time);
- event.set_loadedClass(k());
+ event.set_loadedClass(k);
event.set_definingClassLoader(k->class_loader_data());
event.set_initiatingClassLoader(init_cld);
event.commit();
@@ -637,12 +627,12 @@
#endif // INCLUDE_TRACE
}
-static void class_define_event(instanceKlassHandle k,
+static void class_define_event(InstanceKlass* k,
const ClassLoaderData* def_cld) {
#if INCLUDE_TRACE
EventClassDefine event;
if (event.should_commit()) {
- event.set_definedClass(k());
+ event.set_definedClass(k);
event.set_definingClassLoader(def_cld);
event.commit();
}
@@ -708,17 +698,17 @@
bool class_has_been_loaded = false;
bool super_load_in_progress = false;
bool havesupername = false;
- instanceKlassHandle k;
+ InstanceKlass* k = NULL;
PlaceholderEntry* placeholder;
Symbol* superclassname = NULL;
{
MutexLocker mu(SystemDictionary_lock, THREAD);
- Klass* check = find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name, loader_data);
if (check != NULL) {
// Klass is already loaded, so just return it
class_has_been_loaded = true;
- k = instanceKlassHandle(THREAD, check);
+ k = check;
} else {
placeholder = placeholders()->get_entry(p_index, p_hash, name, loader_data);
if (placeholder && placeholder->super_load_in_progress()) {
@@ -733,12 +723,15 @@
// If the class is in the placeholder table, class loading is in progress
if (super_load_in_progress && havesupername==true) {
- k = SystemDictionary::handle_parallel_super_load(name, superclassname,
- class_loader, protection_domain, lockObject, THREAD);
+ k = handle_parallel_super_load(name,
+ superclassname,
+ class_loader,
+ protection_domain,
+ lockObject, THREAD);
if (HAS_PENDING_EXCEPTION) {
return NULL;
}
- if (!k.is_null()) {
+ if (k != NULL) {
class_has_been_loaded = true;
}
}
@@ -795,10 +788,10 @@
double_lock_wait(lockObject, THREAD);
}
// Check if classloading completed while we were waiting
- Klass* check = find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name, loader_data);
if (check != NULL) {
// Klass is already loaded, so just return it
- k = instanceKlassHandle(THREAD, check);
+ k = check;
class_has_been_loaded = true;
}
// check if other thread failed to load and cleaned up
@@ -820,10 +813,10 @@
// i.e. now that we hold the LOAD_INSTANCE token on loading this class/CL
// one final check if the load has already completed
// class loaders holding the ObjectLock shouldn't find the class here
- Klass* check = find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name, loader_data);
if (check != NULL) {
// Klass is already loaded, so return it after checking/adding protection domain
- k = instanceKlassHandle(THREAD, check);
+ k = check;
class_has_been_loaded = true;
}
}
@@ -850,13 +843,13 @@
// with the new cleaner mechanism, even with AllowParallelDefineClass
// Bootstrap goes through here to allow for an extra guarantee check
if (UnsyncloadClass || (class_loader.is_null())) {
- if (k.is_null() && HAS_PENDING_EXCEPTION
+ if (k == NULL && HAS_PENDING_EXCEPTION
&& PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) {
MutexLocker mu(SystemDictionary_lock, THREAD);
- Klass* check = find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name, loader_data);
if (check != NULL) {
// Klass is already loaded, so just use it
- k = instanceKlassHandle(THREAD, check);
+ k = check;
CLEAR_PENDING_EXCEPTION;
guarantee((!class_loader.is_null()), "dup definition for bootstrap loader?");
}
@@ -865,7 +858,7 @@
// If everything was OK (no exceptions, no null return value), and
// class_loader is NOT the defining loader, do a little more bookkeeping.
- if (!HAS_PENDING_EXCEPTION && !k.is_null() &&
+ if (!HAS_PENDING_EXCEPTION && k != NULL &&
k->class_loader() != class_loader()) {
check_constraints(d_index, d_hash, k, class_loader, false, THREAD);
@@ -883,7 +876,7 @@
if (JvmtiExport::should_post_class_load()) {
Thread *thread = THREAD;
assert(thread->is_Java_thread(), "thread->is_Java_thread()");
- JvmtiExport::post_class_load((JavaThread *) thread, k());
+ JvmtiExport::post_class_load((JavaThread *) thread, k);
}
}
}
@@ -899,7 +892,7 @@
}
}
- if (HAS_PENDING_EXCEPTION || k.is_null()) {
+ if (HAS_PENDING_EXCEPTION || k == NULL) {
return NULL;
}
@@ -910,12 +903,12 @@
ClassLoaderData* loader_data = k->class_loader_data();
MutexLocker mu(SystemDictionary_lock, THREAD);
Klass* kk = find_class(name, loader_data);
- assert(kk == k(), "should be present in dictionary");
+ assert(kk == k, "should be present in dictionary");
}
#endif
// return if the protection domain in NULL
- if (protection_domain() == NULL) return k();
+ if (protection_domain() == NULL) return k;
// Check the protection domain has the right access
{
@@ -930,14 +923,14 @@
if (dictionary()->is_valid_protection_domain(d_index, d_hash, name,
loader_data,
protection_domain)) {
- return k();
+ return k;
}
}
// Verify protection domain. If it fails an exception is thrown
validate_protection_domain(k, class_loader, protection_domain, CHECK_NULL);
- return k();
+ return k;
}
@@ -1019,13 +1012,13 @@
// does not publish the classes via the SystemDictionary.
// Handles unsafe_DefineAnonymousClass and redefineclasses
// RedefinedClasses do not add to the class hierarchy
-Klass* SystemDictionary::parse_stream(Symbol* class_name,
- Handle class_loader,
- Handle protection_domain,
- ClassFileStream* st,
- const InstanceKlass* host_klass,
- GrowableArray<Handle>* cp_patches,
- TRAPS) {
+InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name,
+ Handle class_loader,
+ Handle protection_domain,
+ ClassFileStream* st,
+ const InstanceKlass* host_klass,
+ GrowableArray<Handle>* cp_patches,
+ TRAPS) {
Ticks class_load_start_time = Ticks::now();
@@ -1049,15 +1042,15 @@
// already be present in the SystemDictionary, otherwise we would not
// throw potential ClassFormatErrors.
- instanceKlassHandle k = KlassFactory::create_from_stream(st,
- class_name,
- loader_data,
- protection_domain,
- host_klass,
- cp_patches,
- CHECK_NULL);
-
- if (host_klass != NULL && k.not_null()) {
+ InstanceKlass* k = KlassFactory::create_from_stream(st,
+ class_name,
+ loader_data,
+ protection_domain,
+ host_klass,
+ cp_patches,
+ CHECK_NULL);
+
+ if (host_klass != NULL && k != NULL) {
// If it's anonymous, initialize it now, since nobody else will.
{
@@ -1083,7 +1076,7 @@
// notify jvmti
if (JvmtiExport::should_post_class_load()) {
assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
- JvmtiExport::post_class_load((JavaThread *) THREAD, k());
+ JvmtiExport::post_class_load((JavaThread *) THREAD, k);
}
post_class_load_event(class_load_start_time, k, loader_data);
@@ -1091,7 +1084,7 @@
assert(host_klass != NULL || NULL == cp_patches,
"cp_patches only found with host_klass");
- return k();
+ return k;
}
// Add a klass to the system from a stream (called by jni_DefineClass and
@@ -1099,11 +1092,11 @@
// Note: class_name can be NULL. In that case we do not know the name of
// the class until we have parsed the stream.
-Klass* SystemDictionary::resolve_from_stream(Symbol* class_name,
- Handle class_loader,
- Handle protection_domain,
- ClassFileStream* st,
- TRAPS) {
+InstanceKlass* SystemDictionary::resolve_from_stream(Symbol* class_name,
+ Handle class_loader,
+ Handle protection_domain,
+ ClassFileStream* st,
+ TRAPS) {
HandleMark hm(THREAD);
@@ -1127,9 +1120,7 @@
// Note that we do this even though this klass might
// already be present in the SystemDictionary, otherwise we would not
// throw potential ClassFormatErrors.
- //
-
- instanceKlassHandle k;
+ InstanceKlass* k = NULL;
#if INCLUDE_CDS
k = SystemDictionaryShared::lookup_from_stream(class_name,
@@ -1139,7 +1130,7 @@
CHECK_NULL);
#endif
- if (k.is_null()) {
+ if (k == NULL) {
if (st->buffer() == NULL) {
return NULL;
}
@@ -1152,7 +1143,7 @@
CHECK_NULL);
}
- assert(k.not_null(), "no klass created");
+ assert(k != NULL, "no klass created");
Symbol* h_name = k->name();
assert(class_name == NULL || class_name == h_name, "name mismatch");
@@ -1160,11 +1151,11 @@
// If a class loader supports parallel classloading handle parallel define requests
// find_or_define_instance_class may return a different InstanceKlass
if (is_parallelCapable(class_loader)) {
- instanceKlassHandle defined_k = find_or_define_instance_class(h_name, class_loader, k, THREAD);
- if (!HAS_PENDING_EXCEPTION && defined_k() != k()) {
+ InstanceKlass* defined_k = find_or_define_instance_class(h_name, class_loader, k, THREAD);
+ if (!HAS_PENDING_EXCEPTION && defined_k != k) {
// If a parallel capable class loader already defined this class, register 'k' for cleanup.
- assert(defined_k.not_null(), "Should have a klass if there's no exception");
- loader_data->add_to_deallocate_list(k());
+ assert(defined_k != NULL, "Should have a klass if there's no exception");
+ loader_data->add_to_deallocate_list(k);
k = defined_k;
}
} else {
@@ -1173,8 +1164,8 @@
// If defining the class throws an exception register 'k' for cleanup.
if (HAS_PENDING_EXCEPTION) {
- assert(k.not_null(), "Must have an instance klass here!");
- loader_data->add_to_deallocate_list(k());
+ assert(k != NULL, "Must have an instance klass here!");
+ loader_data->add_to_deallocate_list(k);
return NULL;
}
@@ -1183,10 +1174,10 @@
MutexLocker mu(SystemDictionary_lock, THREAD);
Klass* check = find_class(h_name, k->class_loader_data());
- assert(check == k(), "should be present in the dictionary");
+ assert(check == k, "should be present in the dictionary");
} );
- return k();
+ return k;
}
#if INCLUDE_CDS
@@ -1201,7 +1192,7 @@
// If there is a shared dictionary, then find the entry for the
// given shared system class, if any.
-Klass* SystemDictionary::find_shared_class(Symbol* class_name) {
+InstanceKlass* SystemDictionary::find_shared_class(Symbol* class_name) {
if (shared_dictionary() != NULL) {
unsigned int d_hash = shared_dictionary()->compute_hash(class_name, NULL);
int d_index = shared_dictionary()->hash_to_index(d_hash);
@@ -1219,16 +1210,16 @@
// subclasses (yet). [Classes in the shared space are not part of the
// object hierarchy until loaded.]
-instanceKlassHandle SystemDictionary::load_shared_class(
+InstanceKlass* SystemDictionary::load_shared_class(
Symbol* class_name, Handle class_loader, TRAPS) {
- instanceKlassHandle ik (THREAD, find_shared_class(class_name));
+ InstanceKlass* ik = find_shared_class(class_name);
// Make sure we only return the boot class for the NULL classloader.
- if (ik.not_null() &&
+ if (ik != NULL &&
ik->is_shared_boot_class() && class_loader.is_null()) {
Handle protection_domain;
return load_shared_class(ik, class_loader, protection_domain, THREAD);
}
- return instanceKlassHandle();
+ return NULL;
}
// Check if a shared class can be loaded by the specific classloader:
@@ -1238,7 +1229,7 @@
// - Class from -Xbootclasspath/a. The class has no defined PackageEntry, or must
// be defined in an unnamed module.
bool SystemDictionary::is_shared_class_visible(Symbol* class_name,
- instanceKlassHandle ik,
+ InstanceKlass* ik,
Handle class_loader, TRAPS) {
assert(!ModuleEntryTable::javabase_moduleEntry()->is_patched(),
"Cannot use sharing if java.base is patched");
@@ -1315,18 +1306,17 @@
}
}
-instanceKlassHandle SystemDictionary::load_shared_class(instanceKlassHandle ik,
- Handle class_loader,
- Handle protection_domain, TRAPS) {
- instanceKlassHandle nh = instanceKlassHandle(); // null Handle
-
- if (ik.not_null()) {
+InstanceKlass* SystemDictionary::load_shared_class(InstanceKlass* ik,
+ Handle class_loader,
+ Handle protection_domain, TRAPS) {
+
+ if (ik != NULL) {
Symbol* class_name = ik->name();
bool visible = is_shared_class_visible(
- class_name, ik, class_loader, CHECK_(nh));
+ class_name, ik, class_loader, CHECK_NULL);
if (!visible) {
- return nh;
+ return NULL;
}
// Resolve the superclass and interfaces. They must be the same
@@ -1339,11 +1329,11 @@
if (ik->super() != NULL) {
Symbol* cn = ik->super()->name();
Klass *s = resolve_super_or_fail(class_name, cn,
- class_loader, protection_domain, true, CHECK_(nh));
+ class_loader, protection_domain, true, CHECK_NULL);
if (s != ik->super()) {
// The dynamically resolved super class is not the same as the one we used during dump time,
// so we cannot use ik.
- return nh;
+ return NULL;
} else {
assert(s->is_shared(), "must be");
}
@@ -1354,19 +1344,19 @@
for (int index = 0; index < num_interfaces; index++) {
Klass* k = interfaces->at(index);
Symbol* name = k->name();
- Klass* i = resolve_super_or_fail(class_name, name, class_loader, protection_domain, false, CHECK_(nh));
+ Klass* i = resolve_super_or_fail(class_name, name, class_loader, protection_domain, false, CHECK_NULL);
if (k != i) {
// The dynamically resolved interface class is not the same as the one we used during dump time,
// so we cannot use ik.
- return nh;
+ return NULL;
} else {
assert(i->is_shared(), "must be");
}
}
- instanceKlassHandle new_ik = KlassFactory::check_shared_class_file_load_hook(
- ik, class_name, class_loader, protection_domain, CHECK_(nh));
- if (new_ik.not_null()) {
+ InstanceKlass* new_ik = KlassFactory::check_shared_class_file_load_hook(
+ ik, class_name, class_loader, protection_domain, CHECK_NULL);
+ if (new_ik != NULL) {
// The class is changed by CFLH. Return the new class. The shared class is
// not used.
return new_ik;
@@ -1391,16 +1381,16 @@
ObjectLocker ol(lockObject, THREAD, true);
// prohibited package check assumes all classes loaded from archive call
// restore_unshareable_info which calls ik->set_package()
- ik->restore_unshareable_info(loader_data, protection_domain, CHECK_(nh));
+ ik->restore_unshareable_info(loader_data, protection_domain, CHECK_NULL);
}
if (log_is_enabled(Info, class, load)) {
- ik()->print_loading_log(LogLevel::Info, loader_data, NULL, NULL);
+ ik->print_loading_log(LogLevel::Info, loader_data, NULL, NULL);
}
// No 'else' here as logging levels are not mutually exclusive
if (log_is_enabled(Debug, class, load)) {
- ik()->print_loading_log(LogLevel::Debug, loader_data, NULL, NULL);
+ ik->print_loading_log(LogLevel::Debug, loader_data, NULL, NULL);
}
// For boot loader, ensure that GetSystemPackage knows that a class in this
@@ -1421,12 +1411,12 @@
}
// notify a class loaded from shared object
- ClassLoadingService::notify_class_loaded(ik(), true /* shared class */);
+ ClassLoadingService::notify_class_loaded(ik, true /* shared class */);
}
ik->set_has_passed_fingerprint_check(false);
if (UseAOT && ik->supers_have_passed_fingerprint_checks()) {
- uint64_t aot_fp = AOTLoader::get_saved_fingerprint(ik());
+ uint64_t aot_fp = AOTLoader::get_saved_fingerprint(ik);
uint64_t cds_fp = ik->get_stored_fingerprint();
if (aot_fp != 0 && aot_fp == cds_fp) {
// This class matches with a class saved in an AOT library
@@ -1440,8 +1430,7 @@
}
#endif // INCLUDE_CDS
-instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) {
- instanceKlassHandle nh = instanceKlassHandle(); // null Handle
+InstanceKlass* SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) {
if (class_loader.is_null()) {
ResourceMark rm;
@@ -1473,14 +1462,14 @@
// and its package will be checked later by
// ModuleEntryTable::verify_javabase_packages.
if (ModuleEntryTable::javabase_defined()) {
- return nh;
+ return NULL;
}
} else {
// Check that the class' package is defined within java.base.
ModuleEntry* mod_entry = pkg_entry->module();
Symbol* mod_entry_name = mod_entry->name();
if (mod_entry_name->fast_compare(vmSymbols::java_base()) != 0) {
- return nh;
+ return NULL;
}
}
}
@@ -1506,7 +1495,7 @@
// Search the shared system dictionary for classes preloaded into the
// shared spaces.
- instanceKlassHandle k;
+ InstanceKlass* k = NULL;
{
#if INCLUDE_CDS
PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
@@ -1514,24 +1503,24 @@
#endif
}
- if (k.is_null()) {
+ if (k == NULL) {
// Use VM class loader
PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time());
- k = ClassLoader::load_class(class_name, search_only_bootloader_append, CHECK_(nh));
+ k = ClassLoader::load_class(class_name, search_only_bootloader_append, CHECK_NULL);
}
// find_or_define_instance_class may return a different InstanceKlass
- if (!k.is_null()) {
- instanceKlassHandle defined_k =
+ if (k != NULL) {
+ InstanceKlass* defined_k =
find_or_define_instance_class(class_name, class_loader, k, THREAD);
- if (!HAS_PENDING_EXCEPTION && defined_k() != k()) {
+ if (!HAS_PENDING_EXCEPTION && defined_k != k) {
// If a parallel capable class loader already defined this class, register 'k' for cleanup.
- assert(defined_k.not_null(), "Should have a klass if there's no exception");
- loader_data->add_to_deallocate_list(k());
+ assert(defined_k != NULL, "Should have a klass if there's no exception");
+ loader_data->add_to_deallocate_list(k);
k = defined_k;
} else if (HAS_PENDING_EXCEPTION) {
- loader_data->add_to_deallocate_list(k());
- return nh;
+ loader_data->add_to_deallocate_list(k);
+ return NULL;
}
}
return k;
@@ -1549,13 +1538,13 @@
jt->get_thread_stat()->perf_timers_addr(),
PerfClassTraceTime::CLASS_LOAD);
- Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nh));
+ Handle s = java_lang_String::create_from_symbol(class_name, CHECK_NULL);
// Translate to external class name format, i.e., convert '/' chars to '.'
- Handle string = java_lang_String::externalize_classname(s, CHECK_(nh));
+ Handle string = java_lang_String::externalize_classname(s, CHECK_NULL);
JavaValue result(T_OBJECT);
- KlassHandle spec_klass (THREAD, SystemDictionary::ClassLoader_klass());
+ InstanceKlass* spec_klass = SystemDictionary::ClassLoader_klass();
// Call public unsynchronized loadClass(String) directly for all class loaders
// for parallelCapable class loaders. JDK >=7, loadClass(String, boolean) will
@@ -1581,7 +1570,7 @@
vmSymbols::loadClassInternal_name(),
vmSymbols::string_class_signature(),
string,
- CHECK_(nh));
+ CHECK_NULL);
} else {
JavaCalls::call_virtual(&result,
class_loader,
@@ -1589,7 +1578,7 @@
vmSymbols::loadClass_name(),
vmSymbols::string_class_signature(),
string,
- CHECK_(nh));
+ CHECK_NULL);
}
assert(result.get_type() == T_OBJECT, "just checking");
@@ -1598,8 +1587,7 @@
// Primitive classes return null since forName() can not be
// used to obtain any of the Class objects representing primitives or void
if ((obj != NULL) && !(java_lang_Class::is_primitive(obj))) {
- instanceKlassHandle k =
- instanceKlassHandle(THREAD, java_lang_Class::as_Klass(obj));
+ InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(obj));
// For user defined Java class loaders, check that the name returned is
// the same as that requested. This check is done for the bootstrap
// loader when parsing the class file.
@@ -1608,11 +1596,11 @@
}
}
// Class is not found or has the wrong name, return NULL
- return nh;
+ return NULL;
}
}
-void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) {
+void SystemDictionary::define_instance_class(InstanceKlass* k, TRAPS) {
HandleMark hm(THREAD);
ClassLoaderData* loader_data = k->class_loader_data();
@@ -1677,7 +1665,7 @@
// notify jvmti
if (JvmtiExport::should_post_class_load()) {
assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
- JvmtiExport::post_class_load((JavaThread *) THREAD, k());
+ JvmtiExport::post_class_load((JavaThread *) THREAD, k);
}
class_define_event(k, loader_data);
@@ -1703,16 +1691,16 @@
// placeholders()->find_and_add(PlaceholderTable::DEFINE_CLASS),
// you need to find_and_remove it before returning.
// So be careful to not exit with a CHECK_ macro betweeen these calls.
-instanceKlassHandle SystemDictionary::find_or_define_instance_class(Symbol* class_name, Handle class_loader, instanceKlassHandle k, TRAPS) {
-
- instanceKlassHandle nh = instanceKlassHandle(); // null Handle
+InstanceKlass* SystemDictionary::find_or_define_instance_class(Symbol* class_name, Handle class_loader,
+ InstanceKlass* k, TRAPS) {
+
Symbol* name_h = k->name(); // passed in class_name may be null
ClassLoaderData* loader_data = class_loader_data(class_loader);
unsigned int d_hash = dictionary()->compute_hash(name_h, loader_data);
int d_index = dictionary()->hash_to_index(d_hash);
-// Hold SD lock around find_class and placeholder creation for DEFINE_CLASS
+ // Hold SD lock around find_class and placeholder creation for DEFINE_CLASS
unsigned int p_hash = placeholders()->compute_hash(name_h, loader_data);
int p_index = placeholders()->hash_to_index(p_hash);
PlaceholderEntry* probe;
@@ -1721,9 +1709,9 @@
MutexLocker mu(SystemDictionary_lock, THREAD);
// First check if class already defined
if (UnsyncloadClass || (is_parallelDefine(class_loader))) {
- Klass* check = find_class(d_index, d_hash, name_h, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name_h, loader_data);
if (check != NULL) {
- return(instanceKlassHandle(THREAD, check));
+ return check;
}
}
@@ -1743,10 +1731,10 @@
placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, PlaceholderTable::DEFINE_CLASS, THREAD);
SystemDictionary_lock->notify_all();
#ifdef ASSERT
- Klass* check = find_class(d_index, d_hash, name_h, loader_data);
+ InstanceKlass* check = find_class(d_index, d_hash, name_h, loader_data);
assert(check != NULL, "definer missed recording success");
#endif
- return(instanceKlassHandle(THREAD, probe->instance_klass()));
+ return probe->instance_klass();
} else {
// This thread will define the class (even if earlier thread tried and had an error)
probe->set_definer(THREAD);
@@ -1767,7 +1755,7 @@
linkage_exception = Handle(THREAD,PENDING_EXCEPTION);
CLEAR_PENDING_EXCEPTION;
} else {
- probe->set_instance_klass(k());
+ probe->set_instance_klass(k);
}
probe->set_definer(NULL);
placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, PlaceholderTable::DEFINE_CLASS, THREAD);
@@ -1777,7 +1765,7 @@
// Can't throw exception while holding lock due to rank ordering
if (linkage_exception() != NULL) {
- THROW_OOP_(linkage_exception(), nh); // throws exception and returns
+ THROW_OOP_(linkage_exception(), NULL); // throws exception and returns
}
return k;
@@ -1817,15 +1805,14 @@
// ----------------------------------------------------------------------------
// Lookup
-Klass* SystemDictionary::find_class(int index, unsigned int hash,
- Symbol* class_name,
- ClassLoaderData* loader_data) {
+InstanceKlass* SystemDictionary::find_class(int index, unsigned int hash,
+ Symbol* class_name,
+ ClassLoaderData* loader_data) {
assert_locked_or_safepoint(SystemDictionary_lock);
assert (index == dictionary()->index_for(class_name, loader_data),
"incorrect index?");
- Klass* k = dictionary()->find_class(index, hash, class_name, loader_data);
- return k;
+ return dictionary()->find_class(index, hash, class_name, loader_data);
}
@@ -1840,7 +1827,7 @@
// Used for assertions and verification only
-Klass* SystemDictionary::find_class(Symbol* class_name, ClassLoaderData* loader_data) {
+InstanceKlass* SystemDictionary::find_class(Symbol* class_name, ClassLoaderData* loader_data) {
#ifndef ASSERT
guarantee(VerifyBeforeGC ||
VerifyDuringGC ||
@@ -1868,8 +1855,8 @@
// is held, to ensure that the compiler is not using the class hierachy, and that deoptimization will kick in
// before a new class is used.
-void SystemDictionary::add_to_hierarchy(instanceKlassHandle k, TRAPS) {
- assert(k.not_null(), "just checking");
+void SystemDictionary::add_to_hierarchy(InstanceKlass* k, TRAPS) {
+ assert(k != NULL, "just checking");
assert_locked_or_safepoint(Compile_lock);
// Link into hierachy. Make sure the vtables are initialized before linking into
@@ -2150,8 +2137,7 @@
if (UseSharedSpaces) {
initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Object_klass), scan, CHECK);
// Initialize the constant pool for the Object_class
- InstanceKlass* ik = InstanceKlass::cast(Object_klass());
- ik->constants()->restore_unshareable_info(CHECK);
+ Object_klass()->constants()->restore_unshareable_info(CHECK);
initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK);
} else {
initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK);
@@ -2231,7 +2217,7 @@
// if initiating loader, then ok if InstanceKlass matches existing entry
void SystemDictionary::check_constraints(int d_index, unsigned int d_hash,
- instanceKlassHandle k,
+ InstanceKlass* k,
Handle class_loader, bool defining,
TRAPS) {
const char *linkage_error1 = NULL;
@@ -2242,8 +2228,8 @@
MutexLocker mu(SystemDictionary_lock, THREAD);
- Klass* check = find_class(d_index, d_hash, name, loader_data);
- if (check != (Klass*)NULL) {
+ InstanceKlass* check = find_class(d_index, d_hash, name, loader_data);
+ if (check != NULL) {
// if different InstanceKlass - duplicate class definition,
// else - ok, class loaded by a different thread in parallel,
// we should only have found it if it was done loading and ok to use
@@ -2251,9 +2237,9 @@
// also holds array classes
assert(check->is_instance_klass(), "noninstance in systemdictionary");
- if ((defining == true) || (k() != check)) {
- linkage_error1 = "loader (instance of ";
- linkage_error2 = "): attempted duplicate class definition for name: \"";
+ if ((defining == true) || (k != check)) {
+ linkage_error1 = "loader (instance of ";
+ linkage_error2 = "): attempted duplicate class definition for name: \"";
} else {
return;
}
@@ -2292,7 +2278,7 @@
// have been called.
void SystemDictionary::update_dictionary(int d_index, unsigned int d_hash,
int p_index, unsigned int p_hash,
- instanceKlassHandle k,
+ InstanceKlass* k,
Handle class_loader,
TRAPS) {
// Compile_lock prevents systemDictionary updates during compilations
@@ -2324,7 +2310,7 @@
}
// Make a new system dictionary entry.
- Klass* sd_check = find_class(d_index, d_hash, name, loader_data);
+ InstanceKlass* sd_check = find_class(d_index, d_hash, name, loader_data);
if (sd_check == NULL) {
dictionary()->add_klass(name, loader_data, k);
notice_modification();
@@ -2415,8 +2401,8 @@
// Better never do a GC while we're holding these oops
NoSafepointVerifier nosafepoint;
- Klass* klass1 = find_class(d_index1, d_hash1, constraint_name, loader_data1);
- Klass* klass2 = find_class(d_index2, d_hash2, constraint_name, loader_data2);
+ InstanceKlass* klass1 = find_class(d_index1, d_hash1, constraint_name, loader_data1);
+ InstanceKlass* klass2 = find_class(d_index2, d_hash2, constraint_name, loader_data2);
return constraints()->add_entry(constraint_name, klass1, class_loader1,
klass2, class_loader2);
}
@@ -2576,7 +2562,7 @@
// Helper for unpacking the return value from linkMethod and linkCallSite.
static methodHandle unpack_method_and_appendix(Handle mname,
- KlassHandle accessing_klass,
+ Klass* accessing_klass,
objArrayHandle appendix_box,
Handle* appendix_result,
TRAPS) {
@@ -2600,7 +2586,7 @@
// MethodName is dropped we need a way to make sure the
// class_loader containing this method is kept alive.
// FIXME: the appendix might also preserve this dependency.
- ClassLoaderData* this_key = InstanceKlass::cast(accessing_klass())->class_loader_data();
+ ClassLoaderData* this_key = accessing_klass->class_loader_data();
this_key->record_dependency(m->method_holder(), CHECK_NULL); // Can throw OOM
return methodHandle(THREAD, m);
}
@@ -2609,10 +2595,10 @@
return empty;
}
-methodHandle SystemDictionary::find_method_handle_invoker(KlassHandle klass,
+methodHandle SystemDictionary::find_method_handle_invoker(Klass* klass,
Symbol* name,
Symbol* signature,
- KlassHandle accessing_klass,
+ Klass* accessing_klass,
Handle *appendix_result,
Handle *method_type_result,
TRAPS) {
@@ -2628,15 +2614,15 @@
assert(appendix_box->obj_at(0) == NULL, "");
// This should not happen. JDK code should take care of that.
- if (accessing_klass.is_null() || method_type.is_null()) {
+ if (accessing_klass == NULL || method_type.is_null()) {
THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokehandle", empty);
}
// call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName
JavaCallArguments args;
- args.push_oop(Handle(THREAD, accessing_klass()->java_mirror()));
+ args.push_oop(Handle(THREAD, accessing_klass->java_mirror()));
args.push_int(ref_kind);
- args.push_oop(Handle(THREAD, klass()->java_mirror()));
+ args.push_oop(Handle(THREAD, klass->java_mirror()));
args.push_oop(name_str);
args.push_oop(method_type);
args.push_oop(appendix_box);
@@ -2675,7 +2661,7 @@
// Because of class loader constraints, all method handle usage must be
// consistent with this loader.
Handle SystemDictionary::find_method_handle_type(Symbol* signature,
- KlassHandle accessing_klass,
+ Klass* accessing_klass,
TRAPS) {
Handle empty;
vmIntrinsics::ID null_iid = vmIntrinsics::_none; // distinct from all method handle invoker intrinsics
@@ -2691,9 +2677,9 @@
}
Handle class_loader, protection_domain;
- if (accessing_klass.not_null()) {
- class_loader = Handle(THREAD, InstanceKlass::cast(accessing_klass())->class_loader());
- protection_domain = Handle(THREAD, InstanceKlass::cast(accessing_klass())->protection_domain());
+ if (accessing_klass != NULL) {
+ class_loader = Handle(THREAD, accessing_klass->class_loader());
+ protection_domain = Handle(THREAD, accessing_klass->protection_domain());
}
bool can_be_cached = true;
int npts = ArgumentCount(signature).size();
@@ -2724,15 +2710,14 @@
pts->obj_at_put(arg++, mirror);
// Check accessibility.
- if (ss.is_object() && accessing_klass.not_null()) {
+ if (ss.is_object() && accessing_klass != NULL) {
Klass* sel_klass = java_lang_Class::as_Klass(mirror);
mirror = NULL; // safety
// Emulate ConstantPool::verify_constant_pool_resolve.
if (sel_klass->is_objArray_klass())
sel_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass();
if (sel_klass->is_instance_klass()) {
- KlassHandle sel_kh(THREAD, sel_klass);
- LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty));
+ LinkResolver::check_klass_accessability(accessing_klass, sel_klass, CHECK_(empty));
}
}
}
@@ -2765,9 +2750,9 @@
}
// Ask Java code to find or construct a method handle constant.
-Handle SystemDictionary::link_method_handle_constant(KlassHandle caller,
+Handle SystemDictionary::link_method_handle_constant(Klass* caller,
int ref_kind, //e.g., JVM_REF_invokeVirtual
- KlassHandle callee,
+ Klass* callee,
Symbol* name_sym,
Symbol* signature,
TRAPS) {
@@ -2776,7 +2761,7 @@
Handle type;
if (signature->utf8_length() > 0 && signature->byte_at(0) == '(') {
type = find_method_handle_type(signature, caller, CHECK_(empty));
- } else if (caller.is_null()) {
+ } else if (caller == NULL) {
// This should not happen. JDK code should take care of that.
THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad MH constant", empty);
} else {
@@ -2813,7 +2798,7 @@
// Ask Java code to find or construct a java.lang.invoke.CallSite for the given
// name and signature, as interpreted relative to the given class loader.
-methodHandle SystemDictionary::find_dynamic_call_site_invoker(KlassHandle caller,
+methodHandle SystemDictionary::find_dynamic_call_site_invoker(Klass* caller,
Handle bootstrap_specifier,
Symbol* name,
Symbol* type,
@@ -2844,7 +2829,7 @@
Handle method_type = find_method_handle_type(type, caller, CHECK_(empty));
// This should not happen. JDK code should take care of that.
- if (caller.is_null() || method_type.is_null()) {
+ if (caller == NULL || method_type.is_null()) {
THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokedynamic", empty);
}
--- a/hotspot/src/share/vm/classfile/systemDictionary.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -259,7 +259,7 @@
static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS);
protected:
// handle error translation for resolve_or_null results
- static Klass* handle_resolution_exception(Symbol* class_name, bool throw_error, KlassHandle klass_h, TRAPS);
+ static Klass* handle_resolution_exception(Symbol* class_name, bool throw_error, Klass* klass, TRAPS);
public:
@@ -282,11 +282,11 @@
// Parse new stream. This won't update the system dictionary or
// class hierarchy, simply parse the stream. Used by JVMTI RedefineClasses.
// Also used by Unsafe_DefineAnonymousClass
- static Klass* parse_stream(Symbol* class_name,
- Handle class_loader,
- Handle protection_domain,
- ClassFileStream* st,
- TRAPS) {
+ static InstanceKlass* parse_stream(Symbol* class_name,
+ Handle class_loader,
+ Handle protection_domain,
+ ClassFileStream* st,
+ TRAPS) {
return parse_stream(class_name,
class_loader,
protection_domain,
@@ -295,20 +295,20 @@
NULL, // cp_patches
THREAD);
}
- static Klass* parse_stream(Symbol* class_name,
- Handle class_loader,
- Handle protection_domain,
- ClassFileStream* st,
- const InstanceKlass* host_klass,
- GrowableArray<Handle>* cp_patches,
- TRAPS);
+ static InstanceKlass* parse_stream(Symbol* class_name,
+ Handle class_loader,
+ Handle protection_domain,
+ ClassFileStream* st,
+ const InstanceKlass* host_klass,
+ GrowableArray<Handle>* cp_patches,
+ TRAPS);
// Resolve from stream (called by jni_DefineClass and JVM_DefineClass)
- static Klass* resolve_from_stream(Symbol* class_name,
- Handle class_loader,
- Handle protection_domain,
- ClassFileStream* st,
- TRAPS);
+ static InstanceKlass* resolve_from_stream(Symbol* class_name,
+ Handle class_loader,
+ Handle protection_domain,
+ ClassFileStream* st,
+ TRAPS);
// Lookup an already loaded class. If not found NULL is returned.
static Klass* find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
@@ -516,10 +516,10 @@
// JSR 292
// find a java.lang.invoke.MethodHandle.invoke* method for a given signature
// (asks Java to compute it if necessary, except in a compiler thread)
- static methodHandle find_method_handle_invoker(KlassHandle klass,
+ static methodHandle find_method_handle_invoker(Klass* klass,
Symbol* name,
Symbol* signature,
- KlassHandle accessing_klass,
+ Klass* accessing_klass,
Handle *appendix_result,
Handle *method_type_result,
TRAPS);
@@ -531,19 +531,19 @@
// find a java.lang.invoke.MethodType object for a given signature
// (asks Java to compute it if necessary, except in a compiler thread)
static Handle find_method_handle_type(Symbol* signature,
- KlassHandle accessing_klass,
+ Klass* accessing_klass,
TRAPS);
// ask Java to compute a java.lang.invoke.MethodHandle object for a given CP entry
- static Handle link_method_handle_constant(KlassHandle caller,
+ static Handle link_method_handle_constant(Klass* caller,
int ref_kind, //e.g., JVM_REF_invokeVirtual
- KlassHandle callee,
+ Klass* callee,
Symbol* name,
Symbol* signature,
TRAPS);
// ask Java to create a dynamic call site, while linking an invokedynamic op
- static methodHandle find_dynamic_call_site_invoker(KlassHandle caller,
+ static methodHandle find_dynamic_call_site_invoker(Klass* caller,
Handle bootstrap_method,
Symbol* name,
Symbol* type,
@@ -615,7 +615,7 @@
static Klass* try_get_next_class();
protected:
- static void validate_protection_domain(instanceKlassHandle klass,
+ static void validate_protection_domain(InstanceKlass* klass,
Handle class_loader,
Handle protection_domain, TRAPS);
@@ -631,48 +631,48 @@
// Basic loading operations
static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
- static instanceKlassHandle handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
+ static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
// Wait on SystemDictionary_lock; unlocks lockObject before
// waiting; relocks lockObject with correct recursion count
// after waiting, but before reentering SystemDictionary_lock
// to preserve lock order semantics.
static void double_lock_wait(Handle lockObject, TRAPS);
- static void define_instance_class(instanceKlassHandle k, TRAPS);
- static instanceKlassHandle find_or_define_instance_class(Symbol* class_name,
+ static void define_instance_class(InstanceKlass* k, TRAPS);
+ static InstanceKlass* find_or_define_instance_class(Symbol* class_name,
Handle class_loader,
- instanceKlassHandle k, TRAPS);
- static bool is_shared_class_visible(Symbol* class_name, instanceKlassHandle ik,
+ InstanceKlass* k, TRAPS);
+ static bool is_shared_class_visible(Symbol* class_name, InstanceKlass* ik,
Handle class_loader, TRAPS);
- static instanceKlassHandle load_shared_class(instanceKlassHandle ik,
- Handle class_loader,
- Handle protection_domain,
- TRAPS);
- static instanceKlassHandle load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
+ static InstanceKlass* load_shared_class(InstanceKlass* ik,
+ Handle class_loader,
+ Handle protection_domain,
+ TRAPS);
+ static InstanceKlass* load_instance_class(Symbol* class_name, Handle class_loader, TRAPS);
static Handle compute_loader_lock_object(Handle class_loader, TRAPS);
static void check_loader_lock_contention(Handle loader_lock, TRAPS);
static bool is_parallelCapable(Handle class_loader);
static bool is_parallelDefine(Handle class_loader);
public:
- static instanceKlassHandle load_shared_class(Symbol* class_name,
- Handle class_loader,
- TRAPS);
+ static InstanceKlass* load_shared_class(Symbol* class_name,
+ Handle class_loader,
+ TRAPS);
static bool is_system_class_loader(oop class_loader);
static bool is_platform_class_loader(oop class_loader);
protected:
- static Klass* find_shared_class(Symbol* class_name);
+ static InstanceKlass* find_shared_class(Symbol* class_name);
// Setup link to hierarchy
- static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
+ static void add_to_hierarchy(InstanceKlass* k, TRAPS);
// We pass in the hashtable index so we can calculate it outside of
// the SystemDictionary_lock.
// Basic find on loaded classes
- static Klass* find_class(int index, unsigned int hash,
- Symbol* name, ClassLoaderData* loader_data);
- static Klass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
+ static InstanceKlass* find_class(int index, unsigned int hash,
+ Symbol* name, ClassLoaderData* loader_data);
+ static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
// Basic find on classes in the midst of being loaded
static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
@@ -697,11 +697,11 @@
// Class loader constraints
static void check_constraints(int index, unsigned int hash,
- instanceKlassHandle k, Handle loader,
+ InstanceKlass* k, Handle loader,
bool defining, TRAPS);
static void update_dictionary(int d_index, unsigned int d_hash,
int p_index, unsigned int p_hash,
- instanceKlassHandle k, Handle loader,
+ InstanceKlass* k, Handle loader,
TRAPS);
// Variables holding commonly used klasses (preloaded)
--- a/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/systemDictionaryShared.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, 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
@@ -33,10 +33,10 @@
class SystemDictionaryShared: public SystemDictionary {
public:
static void initialize(TRAPS) {}
- static instanceKlassHandle find_or_load_shared_class(Symbol* class_name,
- Handle class_loader,
- TRAPS) {
- return instanceKlassHandle();
+ static InstanceKlass* find_or_load_shared_class(Symbol* class_name,
+ Handle class_loader,
+ TRAPS) {
+ return NULL;
}
static void roots_oops_do(OopClosure* blk) {}
static void oops_do(OopClosure* f) {}
@@ -45,7 +45,7 @@
return (class_loader == NULL);
}
static bool is_shared_class_visible_for_classloader(
- instanceKlassHandle ik,
+ InstanceKlass* ik,
Handle class_loader,
const char* pkg_string,
Symbol* pkg_name,
@@ -86,7 +86,7 @@
Symbol* from_name, bool from_field_is_protected,
bool from_is_array, bool from_is_object) {return false;}
static void finalize_verification_constraints() {}
- static void check_verification_constraints(instanceKlassHandle klass,
+ static void check_verification_constraints(InstanceKlass* klass,
TRAPS) {}
};
--- a/hotspot/src/share/vm/classfile/verificationType.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/verificationType.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -42,18 +42,16 @@
}
}
-bool VerificationType::resolve_and_check_assignability(instanceKlassHandle klass, Symbol* name,
+bool VerificationType::resolve_and_check_assignability(InstanceKlass* klass, Symbol* name,
Symbol* from_name, bool from_field_is_protected, bool from_is_array, bool from_is_object, TRAPS) {
HandleMark hm(THREAD);
- Klass* obj = SystemDictionary::resolve_or_fail(
+ Klass* this_class = SystemDictionary::resolve_or_fail(
name, Handle(THREAD, klass->class_loader()),
Handle(THREAD, klass->protection_domain()), true, CHECK_false);
if (log_is_enabled(Debug, class, resolve)) {
- Verifier::trace_class_resolution(obj, klass());
+ Verifier::trace_class_resolution(this_class, klass);
}
- KlassHandle this_class(THREAD, obj);
-
if (this_class->is_interface() && (!from_field_is_protected ||
from_name != vmSymbols::java_lang_Object())) {
// If we are not trying to access a protected field or method in
@@ -68,9 +66,9 @@
from_name, Handle(THREAD, klass->class_loader()),
Handle(THREAD, klass->protection_domain()), true, CHECK_false);
if (log_is_enabled(Debug, class, resolve)) {
- Verifier::trace_class_resolution(from_class, klass());
+ Verifier::trace_class_resolution(from_class, klass);
}
- return InstanceKlass::cast(from_class)->is_subclass_of(this_class());
+ return InstanceKlass::cast(from_class)->is_subclass_of(this_class);
}
return false;
@@ -79,7 +77,7 @@
bool VerificationType::is_reference_assignable_from(
const VerificationType& from, ClassVerifier* context,
bool from_field_is_protected, TRAPS) const {
- instanceKlassHandle klass = context->current_class();
+ InstanceKlass* klass = context->current_class();
if (from.is_null()) {
// null is assignable to any reference
return true;
@@ -94,7 +92,7 @@
return true;
}
- if (DumpSharedSpaces && SystemDictionaryShared::add_verification_constraint(klass(),
+ if (DumpSharedSpaces && SystemDictionaryShared::add_verification_constraint(klass,
name(), from.name(), from_field_is_protected, from.is_array(),
from.is_object())) {
// If add_verification_constraint() returns true, the resolution/check should be
@@ -102,7 +100,7 @@
return true;
}
- return resolve_and_check_assignability(klass(), name(), from.name(),
+ return resolve_and_check_assignability(klass, name(), from.name(),
from_field_is_protected, from.is_array(), from.is_object(), THREAD);
} else if (is_array() && from.is_array()) {
VerificationType comp_this = get_component(context, CHECK_false);
--- a/hotspot/src/share/vm/classfile/verificationType.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/verificationType.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -336,7 +336,7 @@
TRAPS) const;
public:
- static bool resolve_and_check_assignability(instanceKlassHandle klass, Symbol* name,
+ static bool resolve_and_check_assignability(InstanceKlass* klass, Symbol* name,
Symbol* from_name, bool from_field_is_protected,
bool from_is_array, bool from_is_object,
TRAPS);
--- a/hotspot/src/share/vm/classfile/verifier.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/verifier.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -125,7 +125,7 @@
st->print_cr("End class verification for: %s", klassName);
}
-bool Verifier::verify(instanceKlassHandle klass, Verifier::Mode mode, bool should_verify_class, TRAPS) {
+bool Verifier::verify(InstanceKlass* klass, Verifier::Mode mode, bool should_verify_class, TRAPS) {
HandleMark hm(THREAD);
ResourceMark rm(THREAD);
@@ -203,13 +203,13 @@
return true; // verifcation succeeded
} else { // VerifyError or ClassFormatError to be created and thrown
ResourceMark rm(THREAD);
- instanceKlassHandle kls =
+ Klass* kls =
SystemDictionary::resolve_or_fail(exception_name, true, CHECK_false);
if (log_is_enabled(Debug, class, resolve)) {
- Verifier::trace_class_resolution(kls(), klass());
+ Verifier::trace_class_resolution(kls, klass);
}
- while (!kls.is_null()) {
+ while (kls != NULL) {
if (kls == klass) {
// If the class being verified is the exception we're creating
// or one of it's superclasses, we're in trouble and are going
@@ -224,7 +224,7 @@
}
}
-bool Verifier::is_eligible_for_verification(instanceKlassHandle klass, bool should_verify_class) {
+bool Verifier::is_eligible_for_verification(InstanceKlass* klass, bool should_verify_class) {
Symbol* name = klass->name();
Klass* refl_magic_klass = SystemDictionary::reflect_MagicAccessorImpl_klass();
@@ -243,7 +243,7 @@
// already been rewritten to contain constant pool cache indices,
// which the verifier can't understand.
// Shared classes shouldn't have stackmaps either.
- !klass()->is_shared() &&
+ !klass->is_shared() &&
// As of the fix for 4486457 we disable verification for all of the
// dynamically-generated bytecodes associated with the 1.4
@@ -256,7 +256,7 @@
}
Symbol* Verifier::inference_verify(
- instanceKlassHandle klass, char* message, size_t message_len, TRAPS) {
+ InstanceKlass* klass, char* message, size_t message_len, TRAPS) {
JavaThread* thread = (JavaThread*)THREAD;
JNIEnv *env = thread->jni_environment();
@@ -559,7 +559,7 @@
// Methods in ClassVerifier
ClassVerifier::ClassVerifier(
- instanceKlassHandle klass, TRAPS)
+ InstanceKlass* klass, TRAPS)
: _thread(THREAD), _exception_type(NULL), _message(NULL), _klass(klass) {
_this_type = VerificationType::reference_type(klass->name());
// Create list to hold symbols in reference area.
@@ -2001,13 +2001,13 @@
true, THREAD);
if (log_is_enabled(Debug, class, resolve)) {
- instanceKlassHandle cur_class = current_class();
- Verifier::trace_class_resolution(kls, cur_class());
+ InstanceKlass* cur_class = InstanceKlass::cast(current_class());
+ Verifier::trace_class_resolution(kls, cur_class);
}
return kls;
}
-bool ClassVerifier::is_protected_access(instanceKlassHandle this_class,
+bool ClassVerifier::is_protected_access(InstanceKlass* this_class,
Klass* target_class,
Symbol* field_name,
Symbol* field_sig,
@@ -2170,7 +2170,7 @@
}
bool ClassVerifier::name_in_supers(
- Symbol* ref_name, instanceKlassHandle current) {
+ Symbol* ref_name, InstanceKlass* current) {
Klass* super = current->super();
while (super != NULL) {
if (super->name() == ref_name) {
@@ -2600,8 +2600,8 @@
Klass::find_overpass);
// Do nothing if method is not found. Let resolution detect the error.
if (m != NULL) {
- instanceKlassHandle mh(THREAD, m->method_holder());
- if (m->is_protected() && !mh->is_same_class_package(_klass())) {
+ InstanceKlass* mh = m->method_holder();
+ if (m->is_protected() && !mh->is_same_class_package(_klass)) {
bool assignable = current_type().is_assignable_from(
objectref_type, this, true, CHECK_VERIFY(this));
if (!assignable) {
@@ -2631,7 +2631,7 @@
}
bool ClassVerifier::is_same_or_direct_interface(
- instanceKlassHandle klass,
+ InstanceKlass* klass,
VerificationType klass_type,
VerificationType ref_class_type) {
if (ref_class_type.equals(klass_type)) return true;
--- a/hotspot/src/share/vm/classfile/verifier.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/classfile/verifier.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, 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
@@ -51,7 +51,7 @@
* error.
*/
static void log_end_verification(outputStream* st, const char* klassName, Symbol* exception_name, TRAPS);
- static bool verify(instanceKlassHandle klass, Mode mode, bool should_verify_class, TRAPS);
+ static bool verify(InstanceKlass* klass, Mode mode, bool should_verify_class, TRAPS);
// Return false if the class is loaded by the bootstrap loader,
// or if defineClass was called requesting skipping verification
@@ -65,9 +65,9 @@
static void trace_class_resolution(Klass* resolve_class, InstanceKlass* verify_class);
private:
- static bool is_eligible_for_verification(instanceKlassHandle klass, bool should_verify_class);
+ static bool is_eligible_for_verification(InstanceKlass* klass, bool should_verify_class);
static Symbol* inference_verify(
- instanceKlassHandle klass, char* msg, size_t msg_len, TRAPS);
+ InstanceKlass* klass, char* msg, size_t msg_len, TRAPS);
};
class RawBytecodeStream;
@@ -275,7 +275,7 @@
}
bool is_protected_access(
- instanceKlassHandle this_class, Klass* target_class,
+ InstanceKlass* this_class, Klass* target_class,
Symbol* field_name, Symbol* field_sig, bool is_method);
void verify_cp_index(u2 bci, const constantPoolHandle& cp, int index, TRAPS);
@@ -344,11 +344,11 @@
void verify_astore(u2 index, StackMapFrame* current_frame, TRAPS);
void verify_iinc (u2 index, StackMapFrame* current_frame, TRAPS);
- bool name_in_supers(Symbol* ref_name, instanceKlassHandle current);
+ bool name_in_supers(Symbol* ref_name, InstanceKlass* current);
VerificationType object_type() const;
- instanceKlassHandle _klass; // the class being verified
+ InstanceKlass* _klass; // the class being verified
methodHandle _method; // current method being verified
VerificationType _this_type; // the verification type of the current class
@@ -362,7 +362,7 @@
// that a class has been verified and prepared for execution.
bool was_recursively_verified() { return _klass->is_rewritten(); }
- bool is_same_or_direct_interface(instanceKlassHandle klass,
+ bool is_same_or_direct_interface(InstanceKlass* klass,
VerificationType klass_type, VerificationType ref_class_type);
public:
@@ -372,14 +372,14 @@
};
// constructor
- ClassVerifier(instanceKlassHandle klass, TRAPS);
+ ClassVerifier(InstanceKlass* klass, TRAPS);
// destructor
~ClassVerifier();
Thread* thread() { return _thread; }
const methodHandle& method() { return _method; }
- instanceKlassHandle current_class() const { return _klass; }
+ InstanceKlass* current_class() const { return _klass; }
VerificationType current_type() const { return _this_type; }
// Verifies the class. If a verify or class file format error occurs,
--- a/hotspot/src/share/vm/code/codeCache.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/code/codeCache.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -1141,7 +1141,7 @@
}
#ifdef HOTSWAP
-int CodeCache::mark_for_evol_deoptimization(instanceKlassHandle dependee) {
+int CodeCache::mark_for_evol_deoptimization(InstanceKlass* dependee) {
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
int number_of_marked_CodeBlobs = 0;
@@ -1162,7 +1162,7 @@
CompiledMethod* nm = iter.method();
if (nm->is_marked_for_deoptimization()) {
// ...Already marked in the previous pass; don't count it again.
- } else if (nm->is_evol_dependent_on(dependee())) {
+ } else if (nm->is_evol_dependent_on(dependee)) {
ResourceMark rm;
nm->mark_for_deoptimization();
number_of_marked_CodeBlobs++;
@@ -1218,7 +1218,7 @@
}
// Flushes compiled methods dependent on dependee.
-void CodeCache::flush_dependents_on(instanceKlassHandle dependee) {
+void CodeCache::flush_dependents_on(InstanceKlass* dependee) {
assert_lock_strong(Compile_lock);
if (number_of_nmethods_with_dependencies() == 0) return;
@@ -1239,7 +1239,7 @@
#ifdef HOTSWAP
// Flushes compiled methods dependent on dependee in the evolutionary sense
-void CodeCache::flush_evol_dependents_on(instanceKlassHandle ev_k_h) {
+void CodeCache::flush_evol_dependents_on(InstanceKlass* ev_k) {
// --- Compile_lock is not held. However we are at a safepoint.
assert_locked_or_safepoint(Compile_lock);
if (number_of_nmethods_with_dependencies() == 0 && !UseAOT) return;
@@ -1249,7 +1249,7 @@
// holding the CodeCache_lock.
// Compute the dependent nmethods
- if (mark_for_evol_deoptimization(ev_k_h) > 0) {
+ if (mark_for_evol_deoptimization(ev_k) > 0) {
// At least one nmethod has been marked for deoptimization
// All this already happens inside a VM_Operation, so we'll do all the work here.
--- a/hotspot/src/share/vm/code/codeCache.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/code/codeCache.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -260,7 +260,7 @@
private:
static int mark_for_deoptimization(KlassDepChange& changes);
#ifdef HOTSWAP
- static int mark_for_evol_deoptimization(instanceKlassHandle dependee);
+ static int mark_for_evol_deoptimization(InstanceKlass* dependee);
#endif // HOTSWAP
public:
@@ -269,10 +269,10 @@
static void make_marked_nmethods_not_entrant();
// Flushing and deoptimization
- static void flush_dependents_on(instanceKlassHandle dependee);
+ static void flush_dependents_on(InstanceKlass* dependee);
#ifdef HOTSWAP
// Flushing and deoptimization in case of evolution
- static void flush_evol_dependents_on(instanceKlassHandle dependee);
+ static void flush_evol_dependents_on(InstanceKlass* dependee);
#endif // HOTSWAP
// Support for fullspeed debugging
static void flush_dependents_on_method(methodHandle dependee);
--- a/hotspot/src/share/vm/code/compiledIC.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/code/compiledIC.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -457,7 +457,7 @@
// null check, while a static_bound won't. A static_bound (but not optimized) must
// therefore use the unverified entry point.
void CompiledIC::compute_monomorphic_entry(const methodHandle& method,
- KlassHandle receiver_klass,
+ Klass* receiver_klass,
bool is_optimized,
bool static_bound,
bool caller_is_nmethod,
@@ -494,7 +494,7 @@
bool far_c2a = entry != NULL && caller_is_nmethod && method_code->is_far_code();
if (entry != NULL && !far_c2a) {
// Call to near compiled code (nmethod or aot).
- info.set_compiled_entry(entry, (static_bound || is_optimized) ? NULL : receiver_klass(), is_optimized);
+ info.set_compiled_entry(entry, (static_bound || is_optimized) ? NULL : receiver_klass, is_optimized);
} else {
if (is_optimized) {
if (far_c2a) {
@@ -507,7 +507,7 @@
} else {
// Use icholder entry
assert(method_code == NULL || method_code->is_compiled(), "must be compiled");
- CompiledICHolder* holder = new CompiledICHolder(method(), receiver_klass());
+ CompiledICHolder* holder = new CompiledICHolder(method(), receiver_klass);
info.set_icholder_entry(method()->get_c2i_unverified_entry(), holder);
}
}
--- a/hotspot/src/share/vm/code/compiledIC.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/code/compiledIC.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -266,7 +266,7 @@
// allocation in the code cache fails.
bool set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS);
- static void compute_monomorphic_entry(const methodHandle& method, KlassHandle receiver_klass,
+ static void compute_monomorphic_entry(const methodHandle& method, Klass* receiver_klass,
bool is_optimized, bool static_bound, bool caller_is_nmethod,
CompiledICInfo& info, TRAPS);
--- a/hotspot/src/share/vm/code/dependencies.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/code/dependencies.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -737,13 +737,13 @@
class KlassDepChange : public DepChange {
private:
// each change set is rooted in exactly one new type (at present):
- KlassHandle _new_type;
+ Klass* _new_type;
void initialize();
public:
// notes the new type, marks it and all its super-types
- KlassDepChange(KlassHandle new_type)
+ KlassDepChange(Klass* new_type)
: _new_type(new_type)
{
initialize();
@@ -759,7 +759,7 @@
nm->mark_for_deoptimization(/*inc_recompile_counts=*/true);
}
- Klass* new_type() { return _new_type(); }
+ Klass* new_type() { return _new_type; }
// involves_context(k) is true if k is new_type or any of the super types
bool involves_context(Klass* k);
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -683,7 +683,7 @@
AbstractCompiler* comp, bool compiler_thread, TRAPS) {
JavaThread* thread = NULL;
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_0);
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* klass = InstanceKlass::cast(k);
instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_0);
Handle string = java_lang_String::create_from_str(name, CHECK_0);
--- a/hotspot/src/share/vm/gc/shared/allocTracer.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/gc/shared/allocTracer.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, 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
@@ -28,19 +28,19 @@
#include "trace/tracing.hpp"
#include "utilities/globalDefinitions.hpp"
-void AllocTracer::send_allocation_outside_tlab_event(KlassHandle klass, size_t alloc_size) {
+void AllocTracer::send_allocation_outside_tlab_event(Klass* klass, size_t alloc_size) {
EventObjectAllocationOutsideTLAB event;
if (event.should_commit()) {
- event.set_objectClass(klass());
+ event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.commit();
}
}
-void AllocTracer::send_allocation_in_new_tlab_event(KlassHandle klass, size_t tlab_size, size_t alloc_size) {
+void AllocTracer::send_allocation_in_new_tlab_event(Klass* klass, size_t tlab_size, size_t alloc_size) {
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
- event.set_objectClass(klass());
+ event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
--- a/hotspot/src/share/vm/gc/shared/allocTracer.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/gc/shared/allocTracer.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, 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
@@ -30,8 +30,8 @@
class AllocTracer : AllStatic {
public:
- static void send_allocation_outside_tlab_event(KlassHandle klass, size_t alloc_size);
- static void send_allocation_in_new_tlab_event(KlassHandle klass, size_t tlab_size, size_t alloc_size);
+ static void send_allocation_outside_tlab_event(Klass* klass, size_t alloc_size);
+ static void send_allocation_in_new_tlab_event(Klass* klass, size_t tlab_size, size_t alloc_size);
static void send_allocation_requiring_gc_event(size_t size, uint gcId);
};
--- a/hotspot/src/share/vm/gc/shared/collectedHeap.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/gc/shared/collectedHeap.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, 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
@@ -279,7 +279,7 @@
}
#endif
-HeapWord* CollectedHeap::allocate_from_tlab_slow(KlassHandle klass, Thread* thread, size_t size) {
+HeapWord* CollectedHeap::allocate_from_tlab_slow(Klass* klass, Thread* thread, size_t size) {
// Retain tlab and allocate object in shared space if
// the amount free in the tlab is too large to discard.
--- a/hotspot/src/share/vm/gc/shared/collectedHeap.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/gc/shared/collectedHeap.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, 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
@@ -138,28 +138,28 @@
virtual void resize_all_tlabs();
// Allocate from the current thread's TLAB, with broken-out slow path.
- inline static HeapWord* allocate_from_tlab(KlassHandle klass, Thread* thread, size_t size);
- static HeapWord* allocate_from_tlab_slow(KlassHandle klass, Thread* thread, size_t size);
+ inline static HeapWord* allocate_from_tlab(Klass* klass, Thread* thread, size_t size);
+ static HeapWord* allocate_from_tlab_slow(Klass* klass, Thread* thread, size_t size);
// Allocate an uninitialized block of the given size, or returns NULL if
// this is impossible.
- inline static HeapWord* common_mem_allocate_noinit(KlassHandle klass, size_t size, TRAPS);
+ inline static HeapWord* common_mem_allocate_noinit(Klass* klass, size_t size, TRAPS);
// Like allocate_init, but the block returned by a successful allocation
// is guaranteed initialized to zeros.
- inline static HeapWord* common_mem_allocate_init(KlassHandle klass, size_t size, TRAPS);
+ inline static HeapWord* common_mem_allocate_init(Klass* klass, size_t size, TRAPS);
// Helper functions for (VM) allocation.
- inline static void post_allocation_setup_common(KlassHandle klass, HeapWord* obj);
- inline static void post_allocation_setup_no_klass_install(KlassHandle klass,
+ inline static void post_allocation_setup_common(Klass* klass, HeapWord* obj);
+ inline static void post_allocation_setup_no_klass_install(Klass* klass,
HeapWord* objPtr);
- inline static void post_allocation_setup_obj(KlassHandle klass, HeapWord* obj, int size);
+ inline static void post_allocation_setup_obj(Klass* klass, HeapWord* obj, int size);
- inline static void post_allocation_setup_array(KlassHandle klass,
+ inline static void post_allocation_setup_array(Klass* klass,
HeapWord* obj, int length);
- inline static void post_allocation_setup_class(KlassHandle klass, HeapWord* obj, int size);
+ inline static void post_allocation_setup_class(Klass* klass, HeapWord* obj, int size);
// Clears an allocated object.
inline static void init_obj(HeapWord* obj, size_t size);
@@ -299,10 +299,10 @@
GCCause::Cause gc_cause() { return _gc_cause; }
// General obj/array allocation facilities.
- inline static oop obj_allocate(KlassHandle klass, int size, TRAPS);
- inline static oop array_allocate(KlassHandle klass, int size, int length, TRAPS);
- inline static oop array_allocate_nozero(KlassHandle klass, int size, int length, TRAPS);
- inline static oop class_allocate(KlassHandle klass, int size, TRAPS);
+ inline static oop obj_allocate(Klass* klass, int size, TRAPS);
+ inline static oop array_allocate(Klass* klass, int size, int length, TRAPS);
+ inline static oop array_allocate_nozero(Klass* klass, int size, int length, TRAPS);
+ inline static oop class_allocate(Klass* klass, int size, TRAPS);
// Raw memory allocation facilities
// The obj and array allocate methods are covers for these methods.
--- a/hotspot/src/share/vm/gc/shared/collectedHeap.inline.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/gc/shared/collectedHeap.inline.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, 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
@@ -40,26 +40,26 @@
// Inline allocation implementations.
-void CollectedHeap::post_allocation_setup_common(KlassHandle klass,
+void CollectedHeap::post_allocation_setup_common(Klass* klass,
HeapWord* obj_ptr) {
post_allocation_setup_no_klass_install(klass, obj_ptr);
oop obj = (oop)obj_ptr;
#if ! INCLUDE_ALL_GCS
- obj->set_klass(klass());
+ obj->set_klass(klass);
#else
// Need a release store to ensure array/class length, mark word, and
// object zeroing are visible before setting the klass non-NULL, for
// concurrent collectors.
- obj->release_set_klass(klass());
+ obj->release_set_klass(klass);
#endif
}
-void CollectedHeap::post_allocation_setup_no_klass_install(KlassHandle klass,
+void CollectedHeap::post_allocation_setup_no_klass_install(Klass* klass,
HeapWord* obj_ptr) {
oop obj = (oop)obj_ptr;
assert(obj != NULL, "NULL object pointer");
- if (UseBiasedLocking && (klass() != NULL)) {
+ if (UseBiasedLocking && (klass != NULL)) {
obj->set_mark(klass->prototype_header());
} else {
// May be bootstrapping
@@ -68,7 +68,7 @@
}
// Support for jvmti and dtrace
-inline void post_allocation_notify(KlassHandle klass, oop obj, int size) {
+inline void post_allocation_notify(Klass* klass, oop obj, int size) {
// support low memory notifications (no-op if not enabled)
LowMemoryDetector::detect_low_memory_for_collected_pools();
@@ -77,13 +77,13 @@
if (DTraceAllocProbes) {
// support for Dtrace object alloc event (no-op most of the time)
- if (klass() != NULL && klass()->name() != NULL) {
+ if (klass != NULL && klass->name() != NULL) {
SharedRuntime::dtrace_object_alloc(obj, size);
}
}
}
-void CollectedHeap::post_allocation_setup_obj(KlassHandle klass,
+void CollectedHeap::post_allocation_setup_obj(Klass* klass,
HeapWord* obj_ptr,
int size) {
post_allocation_setup_common(klass, obj_ptr);
@@ -94,7 +94,7 @@
post_allocation_notify(klass, obj, size);
}
-void CollectedHeap::post_allocation_setup_class(KlassHandle klass,
+void CollectedHeap::post_allocation_setup_class(Klass* klass,
HeapWord* obj_ptr,
int size) {
// Set oop_size field before setting the _klass field because a
@@ -110,7 +110,7 @@
post_allocation_notify(klass, new_cls, size);
}
-void CollectedHeap::post_allocation_setup_array(KlassHandle klass,
+void CollectedHeap::post_allocation_setup_array(Klass* klass,
HeapWord* obj_ptr,
int length) {
// Set array length before setting the _klass field because a
@@ -125,7 +125,7 @@
post_allocation_notify(klass, new_obj, new_obj->size());
}
-HeapWord* CollectedHeap::common_mem_allocate_noinit(KlassHandle klass, size_t size, TRAPS) {
+HeapWord* CollectedHeap::common_mem_allocate_noinit(Klass* klass, size_t size, TRAPS) {
// Clear unhandled oops for memory allocation. Memory allocation might
// not take out a lock if from tlab, so clear here.
@@ -186,13 +186,13 @@
}
}
-HeapWord* CollectedHeap::common_mem_allocate_init(KlassHandle klass, size_t size, TRAPS) {
+HeapWord* CollectedHeap::common_mem_allocate_init(Klass* klass, size_t size, TRAPS) {
HeapWord* obj = common_mem_allocate_noinit(klass, size, CHECK_NULL);
init_obj(obj, size);
return obj;
}
-HeapWord* CollectedHeap::allocate_from_tlab(KlassHandle klass, Thread* thread, size_t size) {
+HeapWord* CollectedHeap::allocate_from_tlab(Klass* klass, Thread* thread, size_t size) {
assert(UseTLAB, "should use UseTLAB");
HeapWord* obj = thread->tlab().allocate(size);
@@ -211,7 +211,7 @@
Copy::fill_to_aligned_words(obj + hs, size - hs);
}
-oop CollectedHeap::obj_allocate(KlassHandle klass, int size, TRAPS) {
+oop CollectedHeap::obj_allocate(Klass* klass, int size, TRAPS) {
debug_only(check_for_valid_allocation_state());
assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed");
assert(size >= 0, "int won't convert to size_t");
@@ -221,7 +221,7 @@
return (oop)obj;
}
-oop CollectedHeap::class_allocate(KlassHandle klass, int size, TRAPS) {
+oop CollectedHeap::class_allocate(Klass* klass, int size, TRAPS) {
debug_only(check_for_valid_allocation_state());
assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed");
assert(size >= 0, "int won't convert to size_t");
@@ -231,7 +231,7 @@
return (oop)obj;
}
-oop CollectedHeap::array_allocate(KlassHandle klass,
+oop CollectedHeap::array_allocate(Klass* klass,
int size,
int length,
TRAPS) {
@@ -244,7 +244,7 @@
return (oop)obj;
}
-oop CollectedHeap::array_allocate_nozero(KlassHandle klass,
+oop CollectedHeap::array_allocate_nozero(Klass* klass,
int size,
int length,
TRAPS) {
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -138,8 +138,8 @@
// Allocation
IRT_ENTRY(void, InterpreterRuntime::_new(JavaThread* thread, ConstantPool* pool, int index))
- Klass* k_oop = pool->klass_at(index, CHECK);
- instanceKlassHandle klass (THREAD, k_oop);
+ Klass* k = pool->klass_at(index, CHECK);
+ InstanceKlass* klass = InstanceKlass::cast(k);
// Make sure we are not instantiating an abstract klass
klass->check_valid_for_instantiation(true, CHECK);
@@ -461,8 +461,8 @@
Exceptions::debug_check_abort(h_exception);
// exception handler lookup
- KlassHandle h_klass(THREAD, h_exception->klass());
- handler_bci = Method::fast_exception_handler_bci_for(h_method, h_klass, current_bci, THREAD);
+ Klass* klass = h_exception->klass();
+ handler_bci = Method::fast_exception_handler_bci_for(h_method, klass, current_bci, THREAD);
if (HAS_PENDING_EXCEPTION) {
// We threw an exception while trying to find the exception handler.
// Transfer the new exception to the exception handle which will
@@ -1070,15 +1070,15 @@
// non-static field accessors have an object, but we need a handle
h_obj = Handle(thread, obj);
}
- instanceKlassHandle h_cp_entry_f1(thread, (Klass*)cp_entry->f1_as_klass());
- jfieldID fid = jfieldIDWorkaround::to_jfieldID(h_cp_entry_f1, cp_entry->f2_as_index(), is_static);
- JvmtiExport::post_field_access(thread, method(thread), bcp(thread), h_cp_entry_f1, h_obj, fid);
+ InstanceKlass* cp_entry_f1 = InstanceKlass::cast(cp_entry->f1_as_klass());
+ jfieldID fid = jfieldIDWorkaround::to_jfieldID(cp_entry_f1, cp_entry->f2_as_index(), is_static);
+ JvmtiExport::post_field_access(thread, method(thread), bcp(thread), cp_entry_f1, h_obj, fid);
IRT_END
IRT_ENTRY(void, InterpreterRuntime::post_field_modification(JavaThread *thread,
oopDesc* obj, ConstantPoolCacheEntry *cp_entry, jvalue *value))
- Klass* k = (Klass*)cp_entry->f1_as_klass();
+ Klass* k = cp_entry->f1_as_klass();
// check the access_flags for the field in the klass
InstanceKlass* ik = InstanceKlass::cast(k);
@@ -1103,8 +1103,7 @@
bool is_static = (obj == NULL);
HandleMark hm(thread);
- instanceKlassHandle h_klass(thread, k);
- jfieldID fid = jfieldIDWorkaround::to_jfieldID(h_klass, cp_entry->f2_as_index(), is_static);
+ jfieldID fid = jfieldIDWorkaround::to_jfieldID(ik, cp_entry->f2_as_index(), is_static);
jvalue fvalue;
#ifdef _LP64
fvalue = *value;
@@ -1128,7 +1127,7 @@
h_obj = Handle(thread, obj);
}
- JvmtiExport::post_raw_field_modification(thread, method(thread), bcp(thread), h_klass, h_obj,
+ JvmtiExport::post_raw_field_modification(thread, method(thread), bcp(thread), ik, h_obj,
fid, sig_type, &fvalue);
IRT_END
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -55,14 +55,14 @@
// Implementation of CallInfo
-void CallInfo::set_static(KlassHandle resolved_klass, const methodHandle& resolved_method, TRAPS) {
+void CallInfo::set_static(Klass* resolved_klass, const methodHandle& resolved_method, TRAPS) {
int vtable_index = Method::nonvirtual_vtable_index;
set_common(resolved_klass, resolved_klass, resolved_method, resolved_method, CallInfo::direct_call, vtable_index, CHECK);
}
-void CallInfo::set_interface(KlassHandle resolved_klass,
- KlassHandle selected_klass,
+void CallInfo::set_interface(Klass* resolved_klass,
+ Klass* selected_klass,
const methodHandle& resolved_method,
const methodHandle& selected_method,
int itable_index, TRAPS) {
@@ -75,8 +75,8 @@
set_common(resolved_klass, selected_klass, resolved_method, selected_method, CallInfo::itable_call, itable_index, CHECK);
}
-void CallInfo::set_virtual(KlassHandle resolved_klass,
- KlassHandle selected_klass,
+void CallInfo::set_virtual(Klass* resolved_klass,
+ Klass* selected_klass,
const methodHandle& resolved_method,
const methodHandle& selected_method,
int vtable_index, TRAPS) {
@@ -93,7 +93,7 @@
set_handle(SystemDictionary::MethodHandle_klass(), resolved_method, resolved_appendix, resolved_method_type, CHECK);
}
-void CallInfo::set_handle(KlassHandle resolved_klass,
+void CallInfo::set_handle(Klass* resolved_klass,
const methodHandle& resolved_method,
Handle resolved_appendix,
Handle resolved_method_type, TRAPS) {
@@ -110,8 +110,8 @@
_resolved_method_type = resolved_method_type;
}
-void CallInfo::set_common(KlassHandle resolved_klass,
- KlassHandle selected_klass,
+void CallInfo::set_common(Klass* resolved_klass,
+ Klass* selected_klass,
const methodHandle& resolved_method,
const methodHandle& selected_method,
CallKind kind,
@@ -162,8 +162,8 @@
#ifdef ASSERT
// Ensure that this is really the case.
- KlassHandle object_klass = SystemDictionary::Object_klass();
- Method * object_resolved_method = object_klass()->vtable()->method_at(index);
+ Klass* object_klass = SystemDictionary::Object_klass();
+ Method * object_resolved_method = object_klass->vtable()->method_at(index);
assert(object_resolved_method->name() == resolved_method->name(),
"Object and interface method names should match at vtable index %d, %s != %s",
index, object_resolved_method->name()->as_C_string(), resolved_method->name()->as_C_string());
@@ -225,14 +225,13 @@
LinkInfo::LinkInfo(const constantPoolHandle& pool, int index, methodHandle current_method, TRAPS) {
// resolve klass
- Klass* result = pool->klass_ref_at(index, CHECK);
- _resolved_klass = KlassHandle(THREAD, result);
+ _resolved_klass = pool->klass_ref_at(index, CHECK);
// Get name, signature, and static klass
_name = pool->name_ref_at(index);
_signature = pool->signature_ref_at(index);
_tag = pool->tag_ref_at(index);
- _current_klass = KlassHandle(THREAD, pool->pool_holder());
+ _current_klass = pool->pool_holder();
_current_method = current_method;
// Coming from the constant pool always checks access
@@ -241,14 +240,13 @@
LinkInfo::LinkInfo(const constantPoolHandle& pool, int index, TRAPS) {
// resolve klass
- Klass* result = pool->klass_ref_at(index, CHECK);
- _resolved_klass = KlassHandle(THREAD, result);
+ _resolved_klass = pool->klass_ref_at(index, CHECK);
// Get name, signature, and static klass
_name = pool->name_ref_at(index);
_signature = pool->signature_ref_at(index);
_tag = pool->tag_ref_at(index);
- _current_klass = KlassHandle(THREAD, pool->pool_holder());
+ _current_klass = pool->pool_holder();
_current_method = methodHandle();
// Coming from the constant pool always checks access
@@ -256,7 +254,7 @@
}
char* LinkInfo::method_string() const {
- return Method::name_and_sig_as_C_string(_resolved_klass(), _name, _signature);
+ return Method::name_and_sig_as_C_string(_resolved_klass, _name, _signature);
}
#ifndef PRODUCT
@@ -266,20 +264,20 @@
_resolved_klass->name()->as_C_string(),
_name->as_C_string(),
_signature->as_C_string(),
- _current_klass.is_null() ? "(none)" : _current_klass->name()->as_C_string(),
+ _current_klass == NULL ? "(none)" : _current_klass->name()->as_C_string(),
_check_access ? "true" : "false");
}
#endif // PRODUCT
//------------------------------------------------------------------------------------------------------------------------
// Klass resolution
-void LinkResolver::check_klass_accessability(KlassHandle ref_klass, KlassHandle sel_klass, TRAPS) {
+void LinkResolver::check_klass_accessability(Klass* ref_klass, Klass* sel_klass, TRAPS) {
Reflection::VerifyClassAccessResults vca_result =
- Reflection::verify_class_access(ref_klass(), InstanceKlass::cast(sel_klass()), true);
+ Reflection::verify_class_access(ref_klass, InstanceKlass::cast(sel_klass), true);
if (vca_result != Reflection::ACCESS_OK) {
ResourceMark rm(THREAD);
- char* msg = Reflection::verify_class_access_msg(ref_klass(),
- InstanceKlass::cast(sel_klass()),
+ char* msg = Reflection::verify_class_access_msg(ref_klass,
+ InstanceKlass::cast(sel_klass),
vca_result);
if (msg == NULL) {
Exceptions::fthrow(
@@ -308,7 +306,7 @@
methodHandle LinkResolver::lookup_method_in_klasses(const LinkInfo& link_info,
bool checkpolymorphism,
bool in_imethod_resolve, TRAPS) {
- KlassHandle klass = link_info.resolved_klass();
+ Klass* klass = link_info.resolved_klass();
Symbol* name = link_info.name();
Symbol* signature = link_info.signature();
@@ -320,7 +318,7 @@
return methodHandle(THREAD, result);
}
- InstanceKlass* ik = InstanceKlass::cast(klass());
+ InstanceKlass* ik = InstanceKlass::cast(klass);
// JDK 8, JVMS 5.4.3.4: Interface method resolution should
// ignore static and non-public methods of java.lang.Object,
@@ -358,7 +356,7 @@
// returns first instance method
// Looks up method in classes, then looks up local default methods
-methodHandle LinkResolver::lookup_instance_method_in_klasses(KlassHandle klass,
+methodHandle LinkResolver::lookup_instance_method_in_klasses(Klass* klass,
Symbol* name,
Symbol* signature, TRAPS) {
Method* result = klass->uncached_lookup_method(name, signature, Klass::find_overpass);
@@ -374,7 +372,7 @@
}
if (result == NULL) {
- Array<Method*>* default_methods = InstanceKlass::cast(klass())->default_methods();
+ Array<Method*>* default_methods = InstanceKlass::cast(klass)->default_methods();
if (default_methods != NULL) {
result = InstanceKlass::find_method(default_methods, name, signature);
assert(result == NULL || !result->is_static(), "static defaults not allowed");
@@ -383,13 +381,13 @@
return methodHandle(THREAD, result);
}
-int LinkResolver::vtable_index_of_interface_method(KlassHandle klass,
+int LinkResolver::vtable_index_of_interface_method(Klass* klass,
const methodHandle& resolved_method) {
int vtable_index = Method::invalid_vtable_index;
Symbol* name = resolved_method->name();
Symbol* signature = resolved_method->signature();
- InstanceKlass* ik = InstanceKlass::cast(klass());
+ InstanceKlass* ik = InstanceKlass::cast(klass);
// First check in default method array
if (!resolved_method->is_abstract() && ik->default_methods() != NULL) {
@@ -410,7 +408,7 @@
}
methodHandle LinkResolver::lookup_method_in_interfaces(const LinkInfo& cp_info, TRAPS) {
- InstanceKlass *ik = InstanceKlass::cast(cp_info.resolved_klass()());
+ InstanceKlass *ik = InstanceKlass::cast(cp_info.resolved_klass());
// Specify 'true' in order to skip default methods when searching the
// interfaces. Function lookup_method_in_klasses() already looked for
@@ -425,7 +423,7 @@
Handle *appendix_result_or_null,
Handle *method_type_result,
TRAPS) {
- KlassHandle klass = link_info.resolved_klass();
+ Klass* klass = link_info.resolved_klass();
Symbol* name = link_info.name();
Symbol* full_signature = link_info.signature();
@@ -436,8 +434,8 @@
vmIntrinsics::name_at(iid), klass->external_name(),
name->as_C_string(), full_signature->as_C_string());
}
- if ((klass() == SystemDictionary::MethodHandle_klass() ||
- klass() == SystemDictionary::VarHandle_klass()) &&
+ if ((klass == SystemDictionary::MethodHandle_klass() ||
+ klass == SystemDictionary::VarHandle_klass()) &&
iid != vmIntrinsics::_none) {
if (MethodHandles::is_signature_polymorphic_intrinsic(iid)) {
// Most of these do not need an up-call to Java to resolve, so can be done anywhere.
@@ -531,9 +529,9 @@
return NULL;
}
-void LinkResolver::check_method_accessability(KlassHandle ref_klass,
- KlassHandle resolved_klass,
- KlassHandle sel_klass,
+void LinkResolver::check_method_accessability(Klass* ref_klass,
+ Klass* resolved_klass,
+ Klass* sel_klass,
const methodHandle& sel_method,
TRAPS) {
@@ -547,7 +545,7 @@
// We'll check for the method name first, as that's most likely
// to be false (so we'll short-circuit out of these tests).
if (sel_method->name() == vmSymbols::clone_name() &&
- sel_klass() == SystemDictionary::Object_klass() &&
+ sel_klass == SystemDictionary::Object_klass() &&
resolved_klass->is_array_klass()) {
// We need to change "protected" to "public".
assert(flags.is_protected(), "clone not protected?");
@@ -558,9 +556,9 @@
}
// assert(extra_arg_result_or_null != NULL, "must be able to return extra argument");
- if (!Reflection::verify_field_access(ref_klass(),
- resolved_klass(),
- sel_klass(),
+ if (!Reflection::verify_field_access(ref_klass,
+ resolved_klass,
+ sel_klass,
flags,
true)) {
ResourceMark rm(THREAD);
@@ -586,22 +584,21 @@
// It appears to fail when applied to an invokeinterface call site.
// FIXME: Remove this method and ciMethod::check_call; refactor to use the other LinkResolver entry points.
// resolve klass
- KlassHandle resolved_klass;
if (code == Bytecodes::_invokedynamic) {
- resolved_klass = SystemDictionary::MethodHandle_klass();
+ Klass* resolved_klass = SystemDictionary::MethodHandle_klass();
Symbol* method_name = vmSymbols::invoke_name();
Symbol* method_signature = pool->signature_ref_at(index);
- KlassHandle current_klass(THREAD, pool->pool_holder());
+ Klass* current_klass = pool->pool_holder();
LinkInfo link_info(resolved_klass, method_name, method_signature, current_klass);
return resolve_method(link_info, code, THREAD);
}
LinkInfo link_info(pool, index, methodHandle(), CHECK_NULL);
- resolved_klass = link_info.resolved_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
if (pool->has_preresolution()
- || (resolved_klass() == SystemDictionary::MethodHandle_klass() &&
- MethodHandles::is_signature_polymorphic_name(resolved_klass(), link_info.name()))) {
+ || (resolved_klass == SystemDictionary::MethodHandle_klass() &&
+ MethodHandles::is_signature_polymorphic_name(resolved_klass, link_info.name()))) {
Method* result = ConstantPool::method_at_if_loaded(pool, index);
if (result != NULL) {
return methodHandle(THREAD, result);
@@ -652,8 +649,8 @@
}
void LinkResolver::check_field_loader_constraints(Symbol* field, Symbol* sig,
- KlassHandle current_klass,
- KlassHandle sel_klass, TRAPS) {
+ Klass* current_klass,
+ Klass* sel_klass, TRAPS) {
Handle ref_loader(THREAD, current_klass->class_loader());
Handle sel_loader(THREAD, sel_klass->class_loader());
@@ -686,14 +683,14 @@
Bytecodes::Code code, TRAPS) {
Handle nested_exception;
- KlassHandle resolved_klass = link_info.resolved_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
// 1. For invokevirtual, cannot call an interface method
if (code == Bytecodes::_invokevirtual && resolved_klass->is_interface()) {
ResourceMark rm(THREAD);
char buf[200];
jio_snprintf(buf, sizeof(buf), "Found interface %s, but class was expected",
- resolved_klass()->external_name());
+ resolved_klass->external_name());
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -727,21 +724,21 @@
if (resolved_method.is_null()) {
ResourceMark rm(THREAD);
THROW_MSG_CAUSE_(vmSymbols::java_lang_NoSuchMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
link_info.name(),
link_info.signature()),
nested_exception, NULL);
}
- // 6. access checks, access checking may be turned off when calling from within the VM.
- KlassHandle current_klass = link_info.current_klass();
+ // 5. access checks, access checking may be turned off when calling from within the VM.
+ Klass* current_klass = link_info.current_klass();
if (link_info.check_access()) {
- assert(current_klass.not_null() , "current_klass should not be null");
+ assert(current_klass != NULL , "current_klass should not be null");
// check if method can be accessed by the referring class
check_method_accessability(current_klass,
resolved_klass,
- KlassHandle(THREAD, resolved_method->method_holder()),
+ resolved_method->method_holder(),
resolved_method,
CHECK_NULL);
@@ -753,8 +750,8 @@
}
static void trace_method_resolution(const char* prefix,
- KlassHandle klass,
- KlassHandle resolved_klass,
+ Klass* klass,
+ Klass* resolved_klass,
const methodHandle& method,
bool logitables,
int index = -1) {
@@ -768,9 +765,9 @@
}
st->print("%s%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ",
prefix,
- (klass.is_null() ? "<NULL>" : klass->internal_name()),
- (resolved_klass.is_null() ? "<NULL>" : resolved_klass->internal_name()),
- Method::name_and_sig_as_C_string(resolved_klass(),
+ (klass == NULL ? "<NULL>" : klass->internal_name()),
+ (resolved_klass == NULL ? "<NULL>" : resolved_klass->internal_name()),
+ Method::name_and_sig_as_C_string(resolved_klass,
method->name(),
method->signature()),
method->method_holder()->internal_name());
@@ -785,13 +782,13 @@
// Do linktime resolution of a method in the interface within the context of the specied bytecode.
methodHandle LinkResolver::resolve_interface_method(const LinkInfo& link_info, Bytecodes::Code code, TRAPS) {
- KlassHandle resolved_klass = link_info.resolved_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
// check if klass is interface
if (!resolved_klass->is_interface()) {
ResourceMark rm(THREAD);
char buf[200];
- jio_snprintf(buf, sizeof(buf), "Found class %s, but interface was expected", resolved_klass()->external_name());
+ jio_snprintf(buf, sizeof(buf), "Found class %s, but interface was expected", resolved_klass->external_name());
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -816,21 +813,21 @@
// no method found
ResourceMark rm(THREAD);
THROW_MSG_NULL(vmSymbols::java_lang_NoSuchMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
link_info.name(),
link_info.signature()));
}
if (link_info.check_access()) {
// JDK8 adds non-public interface methods, and accessability check requirement
- KlassHandle current_klass = link_info.current_klass();
+ Klass* current_klass = link_info.current_klass();
- assert(current_klass.not_null() , "current_klass should not be null");
+ assert(current_klass != NULL , "current_klass should not be null");
// check if method can be accessed by the referring class
check_method_accessability(current_klass,
resolved_klass,
- KlassHandle(THREAD, resolved_method->method_holder()),
+ resolved_method->method_holder(),
resolved_method,
CHECK_NULL);
@@ -841,7 +838,7 @@
ResourceMark rm(THREAD);
char buf[200];
jio_snprintf(buf, sizeof(buf), "Expected instance not static method %s",
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
resolved_method->name(), resolved_method->signature()));
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -850,12 +847,12 @@
ResourceMark rm(THREAD);
char buf[200];
- KlassHandle current_klass = link_info.current_klass();
+ Klass* current_klass = link_info.current_klass();
jio_snprintf(buf, sizeof(buf), "private interface method requires invokespecial, not invokeinterface: method %s, caller-class:%s",
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
resolved_method->name(),
resolved_method->signature()),
- (current_klass.is_null() ? "<NULL>" : current_klass->internal_name()));
+ (current_klass == NULL ? "<NULL>" : current_klass->internal_name()));
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -873,14 +870,14 @@
//------------------------------------------------------------------------------------------------------------------------
// Field resolution
-void LinkResolver::check_field_accessability(KlassHandle ref_klass,
- KlassHandle resolved_klass,
- KlassHandle sel_klass,
+void LinkResolver::check_field_accessability(Klass* ref_klass,
+ Klass* resolved_klass,
+ Klass* sel_klass,
const fieldDescriptor& fd,
TRAPS) {
- if (!Reflection::verify_field_access(ref_klass(),
- resolved_klass(),
- sel_klass(),
+ if (!Reflection::verify_field_access(ref_klass,
+ resolved_klass,
+ sel_klass,
fd.access_flags(),
true)) {
ResourceMark rm(THREAD);
@@ -913,19 +910,19 @@
bool is_static = (byte == Bytecodes::_getstatic || byte == Bytecodes::_putstatic);
bool is_put = (byte == Bytecodes::_putfield || byte == Bytecodes::_putstatic || byte == Bytecodes::_nofast_putfield);
// Check if there's a resolved klass containing the field
- KlassHandle resolved_klass = link_info.resolved_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
Symbol* field = link_info.name();
Symbol* sig = link_info.signature();
- if (resolved_klass.is_null()) {
+ if (resolved_klass == NULL) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_NoSuchFieldError(), field->as_C_string());
}
// Resolve instance field
- KlassHandle sel_klass(THREAD, resolved_klass->find_field(field, sig, &fd));
+ Klass* sel_klass = resolved_klass->find_field(field, sig, &fd);
// check if field exists; i.e., if a klass containing the field def has been selected
- if (sel_klass.is_null()) {
+ if (sel_klass == NULL) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_NoSuchFieldError(), field->as_C_string());
}
@@ -935,14 +932,14 @@
return;
// check access
- KlassHandle current_klass = link_info.current_klass();
+ Klass* current_klass = link_info.current_klass();
check_field_accessability(current_klass, resolved_klass, sel_klass, fd, CHECK);
// check for errors
if (is_static != fd.is_static()) {
ResourceMark rm(THREAD);
char msg[200];
- jio_snprintf(msg, sizeof(msg), "Expected %s field %s.%s", is_static ? "static" : "non-static", resolved_klass()->external_name(), fd.name()->as_C_string());
+ jio_snprintf(msg, sizeof(msg), "Expected %s field %s.%s", is_static ? "static" : "non-static", resolved_klass->external_name(), fd.name()->as_C_string());
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), msg);
}
@@ -954,10 +951,10 @@
ResourceMark rm(THREAD);
stringStream ss;
- if (sel_klass() != current_klass()) {
+ if (sel_klass != current_klass) {
ss.print("Update to %s final field %s.%s attempted from a different class (%s) than the field's declaring class",
- is_static ? "static" : "non-static", resolved_klass()->external_name(), fd.name()->as_C_string(),
- current_klass()->external_name());
+ is_static ? "static" : "non-static", resolved_klass->external_name(), fd.name()->as_C_string(),
+ current_klass->external_name());
THROW_MSG(vmSymbols::java_lang_IllegalAccessError(), ss.as_string());
}
@@ -973,7 +970,7 @@
if (is_initialized_static_final_update || is_initialized_instance_final_update) {
ss.print("Update to %s final field %s.%s attempted from a different method (%s) than the initializer method %s ",
- is_static ? "static" : "non-static", resolved_klass()->external_name(), fd.name()->as_C_string(),
+ is_static ? "static" : "non-static", resolved_klass->external_name(), fd.name()->as_C_string(),
m()->name()->as_C_string(),
is_static ? "<clinit>" : "<init>");
THROW_MSG(vmSymbols::java_lang_IllegalAccessError(), ss.as_string());
@@ -991,7 +988,7 @@
sel_klass->initialize(CHECK);
}
- if (sel_klass() != current_klass()) {
+ if (sel_klass != current_klass) {
check_field_loader_constraints(field, sig, current_klass, sel_klass, CHECK);
}
@@ -1017,7 +1014,7 @@
methodHandle resolved_method = linktime_resolve_static_method(link_info, CHECK);
// The resolved class can change as a result of this resolution.
- KlassHandle resolved_klass(THREAD, resolved_method->method_holder());
+ Klass* resolved_klass = resolved_method->method_holder();
// Initialize klass (this should only happen if everything is ok)
if (initialize_class && resolved_klass->should_be_initialized()) {
@@ -1036,7 +1033,7 @@
// throws linktime exceptions
methodHandle LinkResolver::linktime_resolve_static_method(const LinkInfo& link_info, TRAPS) {
- KlassHandle resolved_klass = link_info.resolved_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
methodHandle resolved_method;
if (!resolved_klass->is_interface()) {
resolved_method = resolve_method(link_info, Bytecodes::_invokestatic, CHECK_NULL);
@@ -1049,7 +1046,7 @@
if (!resolved_method->is_static()) {
ResourceMark rm(THREAD);
char buf[200];
- jio_snprintf(buf, sizeof(buf), "Expected static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
+ jio_snprintf(buf, sizeof(buf), "Expected static method %s", Method::name_and_sig_as_C_string(resolved_klass,
resolved_method->name(),
resolved_method->signature()));
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
@@ -1078,7 +1075,7 @@
// superclass.method, which can also resolve to a default method
// and the selected method is recalculated relative to the direct superclass
// superinterface.method, which explicitly does not check shadowing
- KlassHandle resolved_klass = link_info.resolved_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
methodHandle resolved_method;
if (!resolved_klass->is_interface()) {
@@ -1089,7 +1086,7 @@
// check if method name is <init>, that it is found in same klass as static type
if (resolved_method->name() == vmSymbols::object_initializer_name() &&
- resolved_method->method_holder() != resolved_klass()) {
+ resolved_method->method_holder() != resolved_klass) {
ResourceMark rm(THREAD);
Exceptions::fthrow(
THREAD_AND_LOCATION,
@@ -1103,24 +1100,25 @@
}
// check if invokespecial's interface method reference is in an indirect superinterface
- KlassHandle current_klass = link_info.current_klass();
- if (!current_klass.is_null() && resolved_klass->is_interface()) {
- Klass *klass_to_check = !InstanceKlass::cast(current_klass())->is_anonymous() ?
- current_klass() :
- InstanceKlass::cast(current_klass())->host_klass();
+ Klass* current_klass = link_info.current_klass();
+ if (current_klass != NULL && resolved_klass->is_interface()) {
+ InstanceKlass* ck = InstanceKlass::cast(current_klass);
+ InstanceKlass *klass_to_check = !ck->is_anonymous() ?
+ ck :
+ InstanceKlass::cast(ck->host_klass());
// Disable verification for the dynamically-generated reflection bytecodes.
bool is_reflect = klass_to_check->is_subclass_of(
SystemDictionary::reflect_MagicAccessorImpl_klass());
if (!is_reflect &&
- !InstanceKlass::cast(klass_to_check)->is_same_or_direct_interface(resolved_klass())) {
+ !klass_to_check->is_same_or_direct_interface(resolved_klass)) {
ResourceMark rm(THREAD);
char buf[200];
jio_snprintf(buf, sizeof(buf),
"Interface method reference: %s, is in an indirect superinterface of %s",
- Method::name_and_sig_as_C_string(resolved_klass(),
- resolved_method->name(),
- resolved_method->signature()),
+ Method::name_and_sig_as_C_string(resolved_klass,
+ resolved_method->name(),
+ resolved_method->signature()),
current_klass->external_name());
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -1132,7 +1130,7 @@
char buf[200];
jio_snprintf(buf, sizeof(buf),
"Expecting non-static method %s",
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
resolved_method->name(),
resolved_method->signature()));
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
@@ -1149,8 +1147,8 @@
// throws runtime exceptions
void LinkResolver::runtime_resolve_special_method(CallInfo& result,
const methodHandle& resolved_method,
- KlassHandle resolved_klass,
- KlassHandle current_klass,
+ Klass* resolved_klass,
+ Klass* current_klass,
bool check_access, TRAPS) {
// resolved method is selected method unless we have an old-style lookup
@@ -1160,33 +1158,29 @@
methodHandle sel_method(THREAD, resolved_method());
// check if this is an old-style super call and do a new lookup if so
- { KlassHandle method_klass = KlassHandle(THREAD,
- resolved_method->method_holder());
-
- if (check_access &&
- // a) check if ACC_SUPER flag is set for the current class
- (current_klass->is_super() || !AllowNonVirtualCalls) &&
- // b) check if the class of the resolved_klass is a superclass
- // (not supertype in order to exclude interface classes) of the current class.
- // This check is not performed for super.invoke for interface methods
- // in super interfaces.
- current_klass->is_subclass_of(resolved_klass()) &&
- current_klass() != resolved_klass() &&
- // c) check if the method is not <init>
- resolved_method->name() != vmSymbols::object_initializer_name()) {
- // Lookup super method
- KlassHandle super_klass(THREAD, current_klass->super());
- sel_method = lookup_instance_method_in_klasses(super_klass,
- resolved_method->name(),
- resolved_method->signature(), CHECK);
- // check if found
- if (sel_method.is_null()) {
- ResourceMark rm(THREAD);
- THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
- resolved_method->name(),
- resolved_method->signature()));
- }
+ if (check_access &&
+ // a) check if ACC_SUPER flag is set for the current class
+ (current_klass->is_super() || !AllowNonVirtualCalls) &&
+ // b) check if the class of the resolved_klass is a superclass
+ // (not supertype in order to exclude interface classes) of the current class.
+ // This check is not performed for super.invoke for interface methods
+ // in super interfaces.
+ current_klass->is_subclass_of(resolved_klass) &&
+ current_klass != resolved_klass &&
+ // c) check if the method is not <init>
+ resolved_method->name() != vmSymbols::object_initializer_name()) {
+ // Lookup super method
+ Klass* super_klass = current_klass->super();
+ sel_method = lookup_instance_method_in_klasses(super_klass,
+ resolved_method->name(),
+ resolved_method->signature(), CHECK);
+ // check if found
+ if (sel_method.is_null()) {
+ ResourceMark rm(THREAD);
+ THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
+ Method::name_and_sig_as_C_string(resolved_klass,
+ resolved_method->name(),
+ resolved_method->signature()));
}
}
@@ -1194,9 +1188,9 @@
if (sel_method->is_static()) {
ResourceMark rm(THREAD);
char buf[200];
- jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
- resolved_method->name(),
- resolved_method->signature()));
+ jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(resolved_klass,
+ resolved_method->name(),
+ resolved_method->signature()));
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -1204,7 +1198,7 @@
if (sel_method->is_abstract()) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
sel_method->name(),
sel_method->signature()));
}
@@ -1218,7 +1212,7 @@
result.set_static(resolved_klass, sel_method, CHECK);
}
-void LinkResolver::resolve_virtual_call(CallInfo& result, Handle recv, KlassHandle receiver_klass,
+void LinkResolver::resolve_virtual_call(CallInfo& result, Handle recv, Klass* receiver_klass,
const LinkInfo& link_info,
bool check_null_and_abstract, TRAPS) {
methodHandle resolved_method = linktime_resolve_virtual_method(link_info, CHECK);
@@ -1238,18 +1232,18 @@
assert(resolved_method->name() != vmSymbols::class_initializer_name (), "should have been checked in verifier");
// check if private interface method
- KlassHandle resolved_klass = link_info.resolved_klass();
- KlassHandle current_klass = link_info.current_klass();
+ Klass* resolved_klass = link_info.resolved_klass();
+ Klass* current_klass = link_info.current_klass();
// This is impossible, if resolve_klass is an interface, we've thrown icce in resolve_method
if (resolved_klass->is_interface() && resolved_method->is_private()) {
ResourceMark rm(THREAD);
char buf[200];
jio_snprintf(buf, sizeof(buf), "private interface method requires invokespecial, not invokevirtual: method %s, caller-class:%s",
- Method::name_and_sig_as_C_string(resolved_klass(),
+ Method::name_and_sig_as_C_string(resolved_klass,
resolved_method->name(),
resolved_method->signature()),
- (current_klass.is_null() ? "<NULL>" : current_klass->internal_name()));
+ (current_klass == NULL ? "<NULL>" : current_klass->internal_name()));
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -1257,9 +1251,9 @@
if (resolved_method->is_static()) {
ResourceMark rm(THREAD);
char buf[200];
- jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
- resolved_method->name(),
- resolved_method->signature()));
+ jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(resolved_klass,
+ resolved_method->name(),
+ resolved_method->signature()));
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -1274,9 +1268,9 @@
// throws runtime exceptions
void LinkResolver::runtime_resolve_virtual_method(CallInfo& result,
const methodHandle& resolved_method,
- KlassHandle resolved_klass,
+ Klass* resolved_klass,
Handle recv,
- KlassHandle recv_klass,
+ Klass* recv_klass,
bool check_null_and_abstract,
TRAPS) {
@@ -1325,18 +1319,18 @@
if (selected_method.is_null()) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
- resolved_method->name(),
- resolved_method->signature()));
+ Method::name_and_sig_as_C_string(resolved_klass,
+ resolved_method->name(),
+ resolved_method->signature()));
}
// check if abstract
if (check_null_and_abstract && selected_method->is_abstract()) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
- selected_method->name(),
- selected_method->signature()));
+ Method::name_and_sig_as_C_string(resolved_klass,
+ selected_method->name(),
+ selected_method->signature()));
}
if (log_develop_is_enabled(Trace, vtables)) {
@@ -1348,7 +1342,7 @@
result.set_virtual(resolved_klass, recv_klass, resolved_method, selected_method, vtable_index, CHECK);
}
-void LinkResolver::resolve_interface_call(CallInfo& result, Handle recv, KlassHandle recv_klass,
+void LinkResolver::resolve_interface_call(CallInfo& result, Handle recv, Klass* recv_klass,
const LinkInfo& link_info,
bool check_null_and_abstract, TRAPS) {
// throws linktime exceptions
@@ -1370,9 +1364,9 @@
// throws runtime exceptions
void LinkResolver::runtime_resolve_interface_method(CallInfo& result,
const methodHandle& resolved_method,
- KlassHandle resolved_klass,
+ Klass* resolved_klass,
Handle recv,
- KlassHandle recv_klass,
+ Klass* recv_klass,
bool check_null_and_abstract, TRAPS) {
// check if receiver exists
if (check_null_and_abstract && recv.is_null()) {
@@ -1380,12 +1374,12 @@
}
// check if receiver klass implements the resolved interface
- if (!recv_klass->is_subtype_of(resolved_klass())) {
+ if (!recv_klass->is_subtype_of(resolved_klass)) {
ResourceMark rm(THREAD);
char buf[200];
jio_snprintf(buf, sizeof(buf), "Class %s does not implement the requested interface %s",
- recv_klass()->external_name(),
- resolved_klass()->external_name());
+ recv_klass->external_name(),
+ resolved_klass->external_name());
THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
@@ -1405,7 +1399,7 @@
if (sel_method.is_null()) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(recv_klass(),
+ Method::name_and_sig_as_C_string(recv_klass,
resolved_method->name(),
resolved_method->signature()));
}
@@ -1414,7 +1408,7 @@
if (!sel_method->is_public()) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
- Method::name_and_sig_as_C_string(recv_klass(),
+ Method::name_and_sig_as_C_string(recv_klass,
sel_method->name(),
sel_method->signature()));
}
@@ -1422,9 +1416,9 @@
if (check_null_and_abstract && sel_method->is_abstract()) {
ResourceMark rm(THREAD);
THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(recv_klass(),
- sel_method->name(),
- sel_method->signature()));
+ Method::name_and_sig_as_C_string(recv_klass,
+ sel_method->name(),
+ sel_method->signature()));
}
if (log_develop_is_enabled(Trace, itables)) {
@@ -1468,7 +1462,7 @@
}
methodHandle LinkResolver::resolve_virtual_call_or_null(
- KlassHandle receiver_klass,
+ Klass* receiver_klass,
const LinkInfo& link_info) {
EXCEPTION_MARK;
CallInfo info;
@@ -1481,7 +1475,7 @@
}
methodHandle LinkResolver::resolve_interface_call_or_null(
- KlassHandle receiver_klass,
+ Klass* receiver_klass,
const LinkInfo& link_info) {
EXCEPTION_MARK;
CallInfo info;
@@ -1493,7 +1487,7 @@
return info.selected_method();
}
-int LinkResolver::resolve_virtual_vtable_index(KlassHandle receiver_klass,
+int LinkResolver::resolve_virtual_vtable_index(Klass* receiver_klass,
const LinkInfo& link_info) {
EXCEPTION_MARK;
CallInfo info;
@@ -1548,7 +1542,7 @@
void LinkResolver::resolve_invoke(CallInfo& result, Handle& recv,
const methodHandle& attached_method,
Bytecodes::Code byte, TRAPS) {
- KlassHandle defc = attached_method->method_holder();
+ Klass* defc = attached_method->method_holder();
Symbol* name = attached_method->name();
Symbol* type = attached_method->signature();
LinkInfo link_info(defc, name, type);
@@ -1589,14 +1583,14 @@
TRAPS) {
LinkInfo link_info(pool, index, CHECK);
- KlassHandle recvrKlass (THREAD, recv.is_null() ? (Klass*)NULL : recv->klass());
+ Klass* recvrKlass = recv.is_null() ? (Klass*)NULL : recv->klass();
resolve_virtual_call(result, recv, recvrKlass, link_info, /*check_null_or_abstract*/true, CHECK);
}
void LinkResolver::resolve_invokeinterface(CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, TRAPS) {
LinkInfo link_info(pool, index, CHECK);
- KlassHandle recvrKlass (THREAD, recv.is_null() ? (Klass*)NULL : recv->klass());
+ Klass* recvrKlass = recv.is_null() ? (Klass*)NULL : recv->klass();
resolve_interface_call(result, recv, recvrKlass, link_info, true, CHECK);
}
@@ -1616,9 +1610,9 @@
const LinkInfo& link_info,
TRAPS) {
// JSR 292: this must be an implicitly generated method MethodHandle.invokeExact(*...) or similar
- KlassHandle resolved_klass = link_info.resolved_klass();
- assert(resolved_klass() == SystemDictionary::MethodHandle_klass() ||
- resolved_klass() == SystemDictionary::VarHandle_klass(), "");
+ Klass* resolved_klass = link_info.resolved_klass();
+ assert(resolved_klass == SystemDictionary::MethodHandle_klass() ||
+ resolved_klass == SystemDictionary::VarHandle_klass(), "");
assert(MethodHandles::is_signature_polymorphic_name(link_info.name()), "");
Handle resolved_appendix;
Handle resolved_method_type;
@@ -1655,7 +1649,7 @@
void LinkResolver::resolve_invokedynamic(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) {
Symbol* method_name = pool->name_ref_at(index);
Symbol* method_signature = pool->signature_ref_at(index);
- KlassHandle current_klass = KlassHandle(THREAD, pool->pool_holder());
+ Klass* current_klass = pool->pool_holder();
// Resolve the bootstrap specifier (BSM + optional arguments).
Handle bootstrap_specifier;
@@ -1693,7 +1687,7 @@
void LinkResolver::resolve_dynamic_call(CallInfo& result,
Handle bootstrap_specifier,
Symbol* method_name, Symbol* method_signature,
- KlassHandle current_klass,
+ Klass* current_klass,
TRAPS) {
// JSR 292: this must resolve to an implicitly generated method MH.linkToCallSite(*...)
// The appendix argument is likely to be a freshly-created CallSite.
--- a/hotspot/src/share/vm/interpreter/linkResolver.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/interpreter/linkResolver.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -47,8 +47,8 @@
unknown_kind = -1
};
private:
- KlassHandle _resolved_klass; // static receiver klass, resolved from a symbolic reference
- KlassHandle _selected_klass; // dynamic receiver class (same as static, or subklass)
+ Klass* _resolved_klass; // static receiver klass, resolved from a symbolic reference
+ Klass* _selected_klass; // dynamic receiver class (same as static, or subklass)
methodHandle _resolved_method; // static target method
methodHandle _selected_method; // dynamic (actual) target method
CallKind _call_kind; // kind of call (static(=bytecode static/special +
@@ -57,21 +57,21 @@
Handle _resolved_appendix; // extra argument in constant pool (if CPCE::has_appendix)
Handle _resolved_method_type; // MethodType (for invokedynamic and invokehandle call sites)
- void set_static(KlassHandle resolved_klass, const methodHandle& resolved_method, TRAPS);
- void set_interface(KlassHandle resolved_klass, KlassHandle selected_klass,
+ void set_static(Klass* resolved_klass, const methodHandle& resolved_method, TRAPS);
+ void set_interface(Klass* resolved_klass, Klass* selected_klass,
const methodHandle& resolved_method,
const methodHandle& selected_method,
int itable_index, TRAPS);
- void set_virtual(KlassHandle resolved_klass, KlassHandle selected_klass,
+ void set_virtual(Klass* resolved_klass, Klass* selected_klass,
const methodHandle& resolved_method,
const methodHandle& selected_method,
int vtable_index, TRAPS);
void set_handle(const methodHandle& resolved_method,
Handle resolved_appendix, Handle resolved_method_type, TRAPS);
- void set_handle(KlassHandle resolved_klass,
+ void set_handle(Klass* resolved_klass,
const methodHandle& resolved_method,
Handle resolved_appendix, Handle resolved_method_type, TRAPS);
- void set_common(KlassHandle resolved_klass, KlassHandle selected_klass,
+ void set_common(Klass* resolved_klass, Klass* selected_klass,
const methodHandle& resolved_method,
const methodHandle& selected_method,
CallKind kind,
@@ -91,8 +91,8 @@
// does not queue the method for compilation
CallInfo(Method* resolved_method, Klass* resolved_klass = NULL);
- KlassHandle resolved_klass() const { return _resolved_klass; }
- KlassHandle selected_klass() const { return _selected_klass; }
+ Klass* resolved_klass() const { return _resolved_klass; }
+ Klass* selected_klass() const { return _selected_klass; }
methodHandle resolved_method() const { return _resolved_method; }
methodHandle selected_method() const { return _selected_method; }
Handle resolved_appendix() const { return _resolved_appendix; }
@@ -135,8 +135,8 @@
class LinkInfo : public StackObj {
Symbol* _name; // extracted from JVM_CONSTANT_NameAndType
Symbol* _signature;
- KlassHandle _resolved_klass; // class that the constant pool entry points to
- KlassHandle _current_klass; // class that owns the constant pool
+ Klass* _resolved_klass; // class that the constant pool entry points to
+ Klass* _current_klass; // class that owns the constant pool
methodHandle _current_method; // sending method
bool _check_access;
constantTag _tag;
@@ -151,14 +151,14 @@
LinkInfo(const constantPoolHandle& pool, int index, TRAPS);
// Condensed information from other call sites within the vm.
- LinkInfo(KlassHandle resolved_klass, Symbol* name, Symbol* signature, KlassHandle current_klass,
+ LinkInfo(Klass* resolved_klass, Symbol* name, Symbol* signature, Klass* current_klass,
AccessCheck check_access = needs_access_check,
constantTag tag = JVM_CONSTANT_Invalid) :
_resolved_klass(resolved_klass),
- _name(name), _signature(signature), _current_klass(current_klass), _current_method(NULL),
+ _name(name), _signature(signature), _current_klass(current_klass), _current_method(methodHandle()),
_check_access(check_access == needs_access_check), _tag(tag) {}
- LinkInfo(KlassHandle resolved_klass, Symbol* name, Symbol* signature, methodHandle current_method,
+ LinkInfo(Klass* resolved_klass, Symbol* name, Symbol* signature, methodHandle current_method,
AccessCheck check_access = needs_access_check,
constantTag tag = JVM_CONSTANT_Invalid) :
_resolved_klass(resolved_klass),
@@ -166,16 +166,16 @@
_check_access(check_access == needs_access_check), _tag(tag) {}
// Case where we just find the method and don't check access against the current class
- LinkInfo(KlassHandle resolved_klass, Symbol*name, Symbol* signature) :
+ LinkInfo(Klass* resolved_klass, Symbol*name, Symbol* signature) :
_resolved_klass(resolved_klass),
- _name(name), _signature(signature), _current_klass(NULL), _current_method(NULL),
+ _name(name), _signature(signature), _current_klass(NULL), _current_method(methodHandle()),
_check_access(false), _tag(JVM_CONSTANT_Invalid) {}
// accessors
Symbol* name() const { return _name; }
Symbol* signature() const { return _signature; }
- KlassHandle resolved_klass() const { return _resolved_klass; }
- KlassHandle current_klass() const { return _current_klass; }
+ Klass* resolved_klass() const { return _resolved_klass; }
+ Klass* current_klass() const { return _current_klass; }
methodHandle current_method() const { return _current_method; }
constantTag tag() const { return _tag; }
bool check_access() const { return _check_access; }
@@ -206,7 +206,7 @@
JVMCI_ONLY(public:) // Needed for CompilerToVM.resolveMethod()
// Not Linktime so doesn't take LinkInfo
static methodHandle lookup_instance_method_in_klasses (
- KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
+ Klass* klass, Symbol* name, Symbol* signature, TRAPS);
JVMCI_ONLY(private:)
// Similar loader constraint checking functions that throw
@@ -215,8 +215,8 @@
const methodHandle& resolved_method,
const char* method_type, TRAPS);
static void check_field_loader_constraints(Symbol* field, Symbol* sig,
- KlassHandle current_klass,
- KlassHandle sel_klass, TRAPS);
+ Klass* current_klass,
+ Klass* sel_klass, TRAPS);
static methodHandle resolve_interface_method(const LinkInfo& link_info, Bytecodes::Code code, TRAPS);
static methodHandle resolve_method (const LinkInfo& link_info, Bytecodes::Code code, TRAPS);
@@ -228,29 +228,29 @@
static void runtime_resolve_special_method (CallInfo& result,
const methodHandle& resolved_method,
- KlassHandle resolved_klass,
- KlassHandle current_klass,
+ Klass* resolved_klass,
+ Klass* current_klass,
bool check_access, TRAPS);
static void runtime_resolve_virtual_method (CallInfo& result,
const methodHandle& resolved_method,
- KlassHandle resolved_klass,
+ Klass* resolved_klass,
Handle recv,
- KlassHandle recv_klass,
+ Klass* recv_klass,
bool check_null_and_abstract, TRAPS);
static void runtime_resolve_interface_method (CallInfo& result,
const methodHandle& resolved_method,
- KlassHandle resolved_klass,
+ Klass* resolved_klass,
Handle recv,
- KlassHandle recv_klass,
+ Klass* recv_klass,
bool check_null_and_abstract, TRAPS);
- static void check_field_accessability(KlassHandle ref_klass,
- KlassHandle resolved_klass,
- KlassHandle sel_klass,
+ static void check_field_accessability(Klass* ref_klass,
+ Klass* resolved_klass,
+ Klass* sel_klass,
const fieldDescriptor& fd, TRAPS);
- static void check_method_accessability(KlassHandle ref_klass,
- KlassHandle resolved_klass,
- KlassHandle sel_klass,
+ static void check_method_accessability(Klass* ref_klass,
+ Klass* resolved_klass,
+ Klass* sel_klass,
const methodHandle& sel_method, TRAPS);
// runtime resolving from constant pool
@@ -268,7 +268,7 @@
const constantPoolHandle& pool, int index, TRAPS);
public:
// constant pool resolving
- static void check_klass_accessability(KlassHandle ref_klass, KlassHandle sel_klass, TRAPS);
+ static void check_klass_accessability(Klass* ref_klass, Klass* sel_klass, TRAPS);
// static resolving calls (will not run any Java code);
// used only from Bytecode_invoke::static_target
@@ -291,31 +291,31 @@
static void resolve_special_call (CallInfo& result,
const LinkInfo& link_info,
TRAPS);
- static void resolve_virtual_call (CallInfo& result, Handle recv, KlassHandle recv_klass,
+ static void resolve_virtual_call (CallInfo& result, Handle recv, Klass* recv_klass,
const LinkInfo& link_info,
bool check_null_and_abstract, TRAPS);
- static void resolve_interface_call(CallInfo& result, Handle recv, KlassHandle recv_klass,
+ static void resolve_interface_call(CallInfo& result, Handle recv, Klass* recv_klass,
const LinkInfo& link_info,
bool check_null_and_abstract, TRAPS);
static void resolve_handle_call (CallInfo& result,
const LinkInfo& link_info, TRAPS);
static void resolve_dynamic_call (CallInfo& result, Handle bootstrap_specifier,
Symbol* method_name, Symbol* method_signature,
- KlassHandle current_klass, TRAPS);
+ Klass* current_klass, TRAPS);
// same as above for compile-time resolution; but returns null handle instead of throwing
// an exception on error also, does not initialize klass (i.e., no side effects)
- static methodHandle resolve_virtual_call_or_null (KlassHandle receiver_klass,
+ static methodHandle resolve_virtual_call_or_null (Klass* receiver_klass,
const LinkInfo& link_info);
- static methodHandle resolve_interface_call_or_null(KlassHandle receiver_klass,
+ static methodHandle resolve_interface_call_or_null(Klass* receiver_klass,
const LinkInfo& link_info);
static methodHandle resolve_static_call_or_null (const LinkInfo& link_info);
static methodHandle resolve_special_call_or_null (const LinkInfo& link_info);
- static int vtable_index_of_interface_method(KlassHandle klass, const methodHandle& resolved_method);
+ static int vtable_index_of_interface_method(Klass* klass, const methodHandle& resolved_method);
// same as above for compile-time resolution; returns vtable_index if current_klass if linked
- static int resolve_virtual_vtable_index (KlassHandle receiver_klass,
+ static int resolve_virtual_vtable_index (Klass* receiver_klass,
const LinkInfo& link_info);
// static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
--- a/hotspot/src/share/vm/interpreter/rewriter.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/interpreter/rewriter.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, 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
@@ -544,16 +544,16 @@
patch_invokedynamic_bytecodes();
}
-void Rewriter::rewrite(instanceKlassHandle klass, TRAPS) {
+void Rewriter::rewrite(InstanceKlass* klass, TRAPS) {
if (!DumpSharedSpaces) {
- assert(!MetaspaceShared::is_in_shared_space(klass()), "archive methods must not be rewritten at run time");
+ assert(!MetaspaceShared::is_in_shared_space(klass), "archive methods must not be rewritten at run time");
}
ResourceMark rm(THREAD);
Rewriter rw(klass, klass->constants(), klass->methods(), CHECK);
// (That's all, folks.)
}
-Rewriter::Rewriter(instanceKlassHandle klass, const constantPoolHandle& cpool, Array<Method*>* methods, TRAPS)
+Rewriter::Rewriter(InstanceKlass* klass, const constantPoolHandle& cpool, Array<Method*>* methods, TRAPS)
: _klass(klass),
_pool(cpool),
_methods(methods),
--- a/hotspot/src/share/vm/interpreter/rewriter.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/interpreter/rewriter.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, 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
@@ -34,7 +34,7 @@
class Rewriter: public StackObj {
private:
- instanceKlassHandle _klass;
+ InstanceKlass* _klass;
constantPoolHandle _pool;
Array<Method*>* _methods;
GrowableArray<int> _cp_map;
@@ -188,7 +188,7 @@
}
// All the work goes in here:
- Rewriter(instanceKlassHandle klass, const constantPoolHandle& cpool, Array<Method*>* methods, TRAPS);
+ Rewriter(InstanceKlass* klass, const constantPoolHandle& cpool, Array<Method*>* methods, TRAPS);
void compute_index_maps();
void make_constant_pool_cache(TRAPS);
@@ -211,7 +211,7 @@
static methodHandle rewrite_jsrs(methodHandle m, TRAPS);
public:
// Driver routine:
- static void rewrite(instanceKlassHandle klass, TRAPS);
+ static void rewrite(InstanceKlass* klass, TRAPS);
};
#endif // SHARE_VM_INTERPRETER_REWRITER_HPP
--- a/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -77,8 +77,8 @@
return NULL;
}
-oop CompilerToVM::get_jvmci_type(KlassHandle klass, TRAPS) {
- if (klass() != NULL) {
+oop CompilerToVM::get_jvmci_type(Klass* klass, TRAPS) {
+ if (klass != NULL) {
JavaValue result(T_OBJECT);
JavaCallArguments args;
args.push_oop(Handle(THREAD, klass->java_mirror()));
@@ -678,7 +678,7 @@
}
C2V_VMENTRY(jobject, getResolvedJavaType, (JNIEnv *, jobject, jobject base, jlong offset, jboolean compressed))
- KlassHandle klass;
+ Klass* klass = NULL;
oop base_object = JNIHandles::resolve(base);
jlong base_address = 0;
if (base_object != NULL && offset == oopDesc::klass_offset_in_bytes()) {
@@ -703,7 +703,7 @@
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
err_msg("Unexpected arguments: %s " JLONG_FORMAT " %s", base_object->klass()->external_name(), offset, compressed ? "true" : "false"));
}
- assert (klass.is_null() || klass->is_klass(), "invalid read");
+ assert (klass == NULL || klass->is_klass(), "invalid read");
oop result = CompilerToVM::get_jvmci_type(klass, CHECK_NULL);
return JNIHandles::make_local(THREAD, result);
}
@@ -711,7 +711,7 @@
C2V_VMENTRY(jobject, findUniqueConcreteMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method))
ResourceMark rm;
methodHandle method = CompilerToVM::asMethod(jvmci_method);
- KlassHandle holder = CompilerToVM::asKlass(jvmci_type);
+ Klass* holder = CompilerToVM::asKlass(jvmci_type);
if (holder->is_interface()) {
THROW_MSG_0(vmSymbols::java_lang_InternalError(), err_msg("Interface %s should be handled in Java code", holder->external_name()));
}
@@ -719,7 +719,7 @@
methodHandle ucm;
{
MutexLocker locker(Compile_lock);
- ucm = Dependencies::find_unique_concrete_method(holder(), method());
+ ucm = Dependencies::find_unique_concrete_method(holder, method());
}
oop result = CompilerToVM::get_jvmci_method(ucm, CHECK_NULL);
return JNIHandles::make_local(THREAD, result);
@@ -848,15 +848,15 @@
C2V_VMENTRY(jobject, lookupKlassInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode))
constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
- KlassHandle loading_klass(cp->pool_holder());
+ Klass* loading_klass = cp->pool_holder();
bool is_accessible = false;
- KlassHandle klass = JVMCIEnv::get_klass_by_index(cp, index, is_accessible, loading_klass);
+ Klass* klass = JVMCIEnv::get_klass_by_index(cp, index, is_accessible, loading_klass);
Symbol* symbol = NULL;
- if (klass.is_null()) {
+ if (klass == NULL) {
symbol = cp->klass_name_at(index);
}
oop result_oop;
- if (!klass.is_null()) {
+ if (klass != NULL) {
result_oop = CompilerToVM::get_jvmci_type(klass, CHECK_NULL);
} else {
Handle result = java_lang_String::create_from_symbol(symbol, CHECK_NULL);
@@ -873,7 +873,7 @@
C2V_VMENTRY(jobject, lookupMethodInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode))
constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
- instanceKlassHandle pool_holder(cp->pool_holder());
+ InstanceKlass* pool_holder = cp->pool_holder();
Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF);
methodHandle method = JVMCIEnv::get_method_by_index(cp, index, bc, pool_holder);
oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL);
@@ -920,11 +920,11 @@
C2V_END
C2V_VMENTRY(jobject, resolveMethod, (JNIEnv *, jobject, jobject receiver_jvmci_type, jobject jvmci_method, jobject caller_jvmci_type))
- KlassHandle recv_klass = CompilerToVM::asKlass(receiver_jvmci_type);
- KlassHandle caller_klass = CompilerToVM::asKlass(caller_jvmci_type);
+ Klass* recv_klass = CompilerToVM::asKlass(receiver_jvmci_type);
+ Klass* caller_klass = CompilerToVM::asKlass(caller_jvmci_type);
methodHandle method = CompilerToVM::asMethod(jvmci_method);
- KlassHandle h_resolved (THREAD, method->method_holder());
+ Klass* resolved = method->method_holder();
Symbol* h_name = method->name();
Symbol* h_signature = method->signature();
@@ -933,13 +933,13 @@
return NULL;
}
- LinkInfo link_info(h_resolved, h_name, h_signature, caller_klass);
+ LinkInfo link_info(resolved, h_name, h_signature, caller_klass);
methodHandle m;
// Only do exact lookup if receiver klass has been linked. Otherwise,
// the vtable has not been setup, and the LinkResolver will fail.
if (recv_klass->is_array_klass() ||
- InstanceKlass::cast(recv_klass())->is_linked() && !recv_klass->is_interface()) {
- if (h_resolved->is_interface()) {
+ InstanceKlass::cast(recv_klass)->is_linked() && !recv_klass->is_interface()) {
+ if (resolved->is_interface()) {
m = LinkResolver::resolve_interface_call_or_null(recv_klass, link_info);
} else {
m = LinkResolver::resolve_virtual_call_or_null(recv_klass, link_info);
@@ -1482,12 +1482,12 @@
C2V_VMENTRY(void, resolveInvokeHandleInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
- KlassHandle holder = cp->klass_ref_at(index, CHECK);
+ Klass* holder = cp->klass_ref_at(index, CHECK);
Symbol* name = cp->name_ref_at(index);
- if (MethodHandles::is_signature_polymorphic_name(holder(), name)) {
+ if (MethodHandles::is_signature_polymorphic_name(holder, name)) {
CallInfo callInfo;
LinkResolver::resolve_invoke(callInfo, Handle(), cp, index, Bytecodes::_invokehandle, CHECK);
- ConstantPoolCacheEntry* cp_cache_entry = cp_cache_entry = cp->cache()->entry_at(cp->decode_cpcache_index(index));
+ ConstantPoolCacheEntry* cp_cache_entry = cp->cache()->entry_at(cp->decode_cpcache_index(index));
cp_cache_entry->set_method_handle(cp, callInfo);
}
C2V_END
--- a/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -161,7 +161,7 @@
static oop get_jvmci_method(const methodHandle& method, TRAPS);
- static oop get_jvmci_type(KlassHandle klass, TRAPS);
+ static oop get_jvmci_type(Klass* klass, TRAPS);
};
class JavaArgumentUnboxer : public SignatureIterator {
--- a/hotspot/src/share/vm/jvmci/jvmciEnv.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciEnv.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -65,9 +65,9 @@
// ------------------------------------------------------------------
// Note: the logic of this method should mirror the logic of
// constantPoolOopDesc::verify_constant_pool_resolve.
-bool JVMCIEnv::check_klass_accessibility(KlassHandle accessing_klass, KlassHandle resolved_klass) {
+bool JVMCIEnv::check_klass_accessibility(Klass* accessing_klass, Klass* resolved_klass) {
if (accessing_klass->is_objArray_klass()) {
- accessing_klass = ObjArrayKlass::cast(accessing_klass())->bottom_klass();
+ accessing_klass = ObjArrayKlass::cast(accessing_klass)->bottom_klass();
}
if (!accessing_klass->is_instance_klass()) {
return true;
@@ -75,21 +75,21 @@
if (resolved_klass->is_objArray_klass()) {
// Find the element klass, if this is an array.
- resolved_klass = ObjArrayKlass::cast(resolved_klass())->bottom_klass();
+ resolved_klass = ObjArrayKlass::cast(resolved_klass)->bottom_klass();
}
if (resolved_klass->is_instance_klass()) {
Reflection::VerifyClassAccessResults result =
- Reflection::verify_class_access(accessing_klass(), InstanceKlass::cast(resolved_klass()), true);
+ Reflection::verify_class_access(accessing_klass, InstanceKlass::cast(resolved_klass), true);
return result == Reflection::ACCESS_OK;
}
return true;
}
// ------------------------------------------------------------------
-KlassHandle JVMCIEnv::get_klass_by_name_impl(KlassHandle& accessing_klass,
- const constantPoolHandle& cpool,
- Symbol* sym,
- bool require_local) {
+Klass* JVMCIEnv::get_klass_by_name_impl(Klass* accessing_klass,
+ const constantPoolHandle& cpool,
+ Symbol* sym,
+ bool require_local) {
JVMCI_EXCEPTION_CONTEXT;
// Now we need to check the SystemDictionary
@@ -99,28 +99,26 @@
// Call recursive to keep scope of strippedsym.
TempNewSymbol strippedsym = SymbolTable::new_symbol(sym->as_utf8()+1,
sym->utf8_length()-2,
- CHECK_(KlassHandle()));
+ CHECK_NULL);
return get_klass_by_name_impl(accessing_klass, cpool, strippedsym, require_local);
}
Handle loader(THREAD, (oop)NULL);
Handle domain(THREAD, (oop)NULL);
- if (!accessing_klass.is_null()) {
+ if (accessing_klass != NULL) {
loader = Handle(THREAD, accessing_klass->class_loader());
domain = Handle(THREAD, accessing_klass->protection_domain());
}
- KlassHandle found_klass;
+ Klass* found_klass = NULL;
{
ttyUnlocker ttyul; // release tty lock to avoid ordering problems
MutexLocker ml(Compile_lock);
- Klass* kls;
if (!require_local) {
- kls = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader, CHECK_(KlassHandle()));
+ found_klass = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader, CHECK_NULL);
} else {
- kls = SystemDictionary::find_instance_or_array_klass(sym, loader, domain, CHECK_(KlassHandle()));
+ found_klass = SystemDictionary::find_instance_or_array_klass(sym, loader, domain, CHECK_NULL);
}
- found_klass = KlassHandle(THREAD, kls);
}
// If we fail to find an array klass, look again for its element type.
@@ -135,21 +133,21 @@
// Build it on the fly if the element class exists.
TempNewSymbol elem_sym = SymbolTable::new_symbol(sym->as_utf8()+1,
sym->utf8_length()-1,
- CHECK_(KlassHandle()));
+ CHECK_NULL);
// Get element Klass recursively.
- KlassHandle elem_klass =
+ Klass* elem_klass =
get_klass_by_name_impl(accessing_klass,
cpool,
elem_sym,
require_local);
- if (!elem_klass.is_null()) {
+ if (elem_klass != NULL) {
// Now make an array for it
- return elem_klass->array_klass(CHECK_(KlassHandle()));
+ return elem_klass->array_klass(CHECK_NULL);
}
}
- if (found_klass.is_null() && !cpool.is_null() && cpool->has_preresolution()) {
+ if (found_klass == NULL && !cpool.is_null() && cpool->has_preresolution()) {
// Look inside the constant pool for pre-resolved class entries.
for (int i = cpool->length() - 1; i >= 1; i--) {
if (cpool->tag_at(i).is_klass()) {
@@ -161,45 +159,45 @@
}
}
- return found_klass();
+ return found_klass;
}
// ------------------------------------------------------------------
-KlassHandle JVMCIEnv::get_klass_by_name(KlassHandle accessing_klass,
+Klass* JVMCIEnv::get_klass_by_name(Klass* accessing_klass,
Symbol* klass_name,
bool require_local) {
ResourceMark rm;
constantPoolHandle cpool;
return get_klass_by_name_impl(accessing_klass,
- cpool,
- klass_name,
- require_local);
+ cpool,
+ klass_name,
+ require_local);
}
// ------------------------------------------------------------------
// Implementation of get_klass_by_index.
-KlassHandle JVMCIEnv::get_klass_by_index_impl(const constantPoolHandle& cpool,
+Klass* JVMCIEnv::get_klass_by_index_impl(const constantPoolHandle& cpool,
int index,
bool& is_accessible,
- KlassHandle accessor) {
+ Klass* accessor) {
JVMCI_EXCEPTION_CONTEXT;
- KlassHandle klass (THREAD, ConstantPool::klass_at_if_loaded(cpool, index));
+ Klass* klass = ConstantPool::klass_at_if_loaded(cpool, index);
Symbol* klass_name = NULL;
- if (klass.is_null()) {
+ if (klass == NULL) {
klass_name = cpool->klass_name_at(index);
}
- if (klass.is_null()) {
+ if (klass == NULL) {
// Not found in constant pool. Use the name to do the lookup.
- KlassHandle k = get_klass_by_name_impl(accessor,
- cpool,
- klass_name,
- false);
+ Klass* k = get_klass_by_name_impl(accessor,
+ cpool,
+ klass_name,
+ false);
// Calculate accessibility the hard way.
- if (k.is_null()) {
+ if (k == NULL) {
is_accessible = false;
} else if (k->class_loader() != accessor->class_loader() &&
- get_klass_by_name_impl(accessor, cpool, k->name(), true).is_null()) {
+ get_klass_by_name_impl(accessor, cpool, k->name(), true) == NULL) {
// Loaded only remotely. Not linked yet.
is_accessible = false;
} else {
@@ -207,7 +205,7 @@
is_accessible = check_klass_accessibility(accessor, k);
}
if (!is_accessible) {
- return KlassHandle();
+ return NULL;
}
return k;
}
@@ -219,13 +217,12 @@
// ------------------------------------------------------------------
// Get a klass from the constant pool.
-KlassHandle JVMCIEnv::get_klass_by_index(const constantPoolHandle& cpool,
- int index,
- bool& is_accessible,
- KlassHandle accessor) {
+Klass* JVMCIEnv::get_klass_by_index(const constantPoolHandle& cpool,
+ int index,
+ bool& is_accessible,
+ Klass* accessor) {
ResourceMark rm;
- KlassHandle result = get_klass_by_index_impl(cpool, index, is_accessible, accessor);
- return result;
+ return get_klass_by_index_impl(cpool, index, is_accessible, accessor);
}
// ------------------------------------------------------------------
@@ -233,7 +230,7 @@
//
// Implementation note: the results of field lookups are cached
// in the accessor klass.
-void JVMCIEnv::get_field_by_index_impl(instanceKlassHandle klass, fieldDescriptor& field_desc,
+void JVMCIEnv::get_field_by_index_impl(InstanceKlass* klass, fieldDescriptor& field_desc,
int index) {
JVMCI_EXCEPTION_CONTEXT;
@@ -251,9 +248,9 @@
// Get the field's declared holder.
int holder_index = cpool->klass_ref_index_at(index);
bool holder_is_accessible;
- KlassHandle declared_holder = get_klass_by_index(cpool, holder_index,
- holder_is_accessible,
- klass);
+ Klass* declared_holder = get_klass_by_index(cpool, holder_index,
+ holder_is_accessible,
+ klass);
// The declared holder of this field may not have been loaded.
// Bail out with partial field information.
@@ -264,7 +261,7 @@
// Perform the field lookup.
Klass* canonical_holder =
- InstanceKlass::cast(declared_holder())->find_field(name, signature, &field_desc);
+ InstanceKlass::cast(declared_holder)->find_field(name, signature, &field_desc);
if (canonical_holder == NULL) {
return;
}
@@ -274,7 +271,7 @@
// ------------------------------------------------------------------
// Get a field by index from a klass's constant pool.
-void JVMCIEnv::get_field_by_index(instanceKlassHandle accessor, fieldDescriptor& fd, int index) {
+void JVMCIEnv::get_field_by_index(InstanceKlass* accessor, fieldDescriptor& fd, int index) {
ResourceMark rm;
return get_field_by_index_impl(accessor, fd, index);
}
@@ -282,17 +279,17 @@
// ------------------------------------------------------------------
// Perform an appropriate method lookup based on accessor, holder,
// name, signature, and bytecode.
-methodHandle JVMCIEnv::lookup_method(instanceKlassHandle h_accessor,
- KlassHandle h_holder,
- Symbol* name,
- Symbol* sig,
+methodHandle JVMCIEnv::lookup_method(InstanceKlass* accessor,
+ Klass* holder,
+ Symbol* name,
+ Symbol* sig,
Bytecodes::Code bc,
constantTag tag) {
// Accessibility checks are performed in JVMCIEnv::get_method_by_index_impl().
- assert(check_klass_accessibility(h_accessor, h_holder), "holder not accessible");
+ assert(check_klass_accessibility(accessor, holder), "holder not accessible");
methodHandle dest_method;
- LinkInfo link_info(h_holder, name, sig, h_accessor, LinkInfo::needs_access_check, tag);
+ LinkInfo link_info(holder, name, sig, accessor, LinkInfo::needs_access_check, tag);
switch (bc) {
case Bytecodes::_invokestatic:
dest_method =
@@ -320,7 +317,7 @@
// ------------------------------------------------------------------
methodHandle JVMCIEnv::get_method_by_index_impl(const constantPoolHandle& cpool,
int index, Bytecodes::Code bc,
- instanceKlassHandle accessor) {
+ InstanceKlass* accessor) {
if (bc == Bytecodes::_invokedynamic) {
ConstantPoolCacheEntry* cpce = cpool->invokedynamic_cp_cache_entry_at(index);
bool is_resolved = !cpce->is_f1_null();
@@ -336,15 +333,15 @@
int holder_index = cpool->klass_ref_index_at(index);
bool holder_is_accessible;
- KlassHandle holder = get_klass_by_index_impl(cpool, holder_index, holder_is_accessible, accessor);
+ Klass* holder = get_klass_by_index_impl(cpool, holder_index, holder_is_accessible, accessor);
// Get the method's name and signature.
Symbol* name_sym = cpool->name_ref_at(index);
Symbol* sig_sym = cpool->signature_ref_at(index);
if (cpool->has_preresolution()
- || ((holder() == SystemDictionary::MethodHandle_klass() || holder() == SystemDictionary::VarHandle_klass()) &&
- MethodHandles::is_signature_polymorphic_name(holder(), name_sym))) {
+ || ((holder == SystemDictionary::MethodHandle_klass() || holder == SystemDictionary::VarHandle_klass()) &&
+ MethodHandles::is_signature_polymorphic_name(holder, name_sym))) {
// Short-circuit lookups for JSR 292-related call sites.
// That is, do not rely only on name-based lookups, because they may fail
// if the names are not resolvable in the boot class loader (7056328).
@@ -385,14 +382,14 @@
}
// ------------------------------------------------------------------
-instanceKlassHandle JVMCIEnv::get_instance_klass_for_declared_method_holder(KlassHandle method_holder) {
+InstanceKlass* JVMCIEnv::get_instance_klass_for_declared_method_holder(Klass* method_holder) {
// For the case of <array>.clone(), the method holder can be an ArrayKlass*
// instead of an InstanceKlass*. For that case simply pretend that the
// declared holder is Object.clone since that's where the call will bottom out.
if (method_holder->is_instance_klass()) {
- return instanceKlassHandle(method_holder());
+ return InstanceKlass::cast(method_holder);
} else if (method_holder->is_array_klass()) {
- return instanceKlassHandle(SystemDictionary::Object_klass());
+ return SystemDictionary::Object_klass();
} else {
ShouldNotReachHere();
}
@@ -403,7 +400,7 @@
// ------------------------------------------------------------------
methodHandle JVMCIEnv::get_method_by_index(const constantPoolHandle& cpool,
int index, Bytecodes::Code bc,
- instanceKlassHandle accessor) {
+ InstanceKlass* accessor) {
ResourceMark rm;
return get_method_by_index_impl(cpool, index, bc, accessor);
}
--- a/hotspot/src/share/vm/jvmci/jvmciEnv.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciEnv.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -79,20 +79,18 @@
// The CI treats a klass as loaded if it is consistently defined in
// another loader, even if it hasn't yet been loaded in all loaders
// that could potentially see it via delegation.
- static KlassHandle get_klass_by_name(KlassHandle accessing_klass,
- Symbol* klass_name,
- bool require_local);
+ static Klass* get_klass_by_name(Klass* accessing_klass, Symbol* klass_name, bool require_local);
// Constant pool access.
- static KlassHandle get_klass_by_index(const constantPoolHandle& cpool,
- int klass_index,
- bool& is_accessible,
- KlassHandle loading_klass);
- static void get_field_by_index(instanceKlassHandle loading_klass, fieldDescriptor& fd,
- int field_index);
+ static Klass* get_klass_by_index(const constantPoolHandle& cpool,
+ int klass_index,
+ bool& is_accessible,
+ Klass* loading_klass);
+ static void get_field_by_index(InstanceKlass* loading_klass, fieldDescriptor& fd,
+ int field_index);
static methodHandle get_method_by_index(const constantPoolHandle& cpool,
- int method_index, Bytecodes::Code bc,
- instanceKlassHandle loading_klass);
+ int method_index, Bytecodes::Code bc,
+ InstanceKlass* loading_klass);
JVMCIEnv(CompileTask* task, int system_dictionary_modification_counter);
@@ -110,26 +108,26 @@
bool _jvmti_can_post_on_exceptions;
// Implementation methods for loading and constant pool access.
- static KlassHandle get_klass_by_name_impl(KlassHandle& accessing_klass,
+ static Klass* get_klass_by_name_impl(Klass* accessing_klass,
const constantPoolHandle& cpool,
Symbol* klass_name,
bool require_local);
- static KlassHandle get_klass_by_index_impl(const constantPoolHandle& cpool,
+ static Klass* get_klass_by_index_impl(const constantPoolHandle& cpool,
int klass_index,
bool& is_accessible,
- KlassHandle loading_klass);
- static void get_field_by_index_impl(instanceKlassHandle loading_klass, fieldDescriptor& fd,
+ Klass* loading_klass);
+ static void get_field_by_index_impl(InstanceKlass* loading_klass, fieldDescriptor& fd,
int field_index);
static methodHandle get_method_by_index_impl(const constantPoolHandle& cpool,
int method_index, Bytecodes::Code bc,
- instanceKlassHandle loading_klass);
+ InstanceKlass* loading_klass);
// Helper methods
- static bool check_klass_accessibility(KlassHandle accessing_klass, KlassHandle resolved_klass);
- static methodHandle lookup_method(instanceKlassHandle accessor,
- KlassHandle holder,
- Symbol* name,
- Symbol* sig,
+ static bool check_klass_accessibility(Klass* accessing_klass, Klass* resolved_klass);
+ static methodHandle lookup_method(InstanceKlass* accessor,
+ Klass* holder,
+ Symbol* name,
+ Symbol* sig,
Bytecodes::Code bc,
constantTag tag);
@@ -180,7 +178,7 @@
// InstanceKlass*. This is needed since the holder of a method in
// the bytecodes could be an array type. Basically this converts
// array types into java/lang/Object and other types stay as they are.
- static instanceKlassHandle get_instance_klass_for_declared_method_holder(KlassHandle klass);
+ static InstanceKlass* get_instance_klass_for_declared_method_holder(Klass* klass);
};
#endif // SHARE_VM_JVMCI_JVMCIENV_HPP
--- a/hotspot/src/share/vm/jvmci/jvmciRuntime.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/jvmci/jvmciRuntime.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -107,12 +107,12 @@
JRT_BLOCK;
assert(klass->is_klass(), "not a class");
Handle holder(THREAD, klass->klass_holder()); // keep the klass alive
- instanceKlassHandle h(thread, klass);
- h->check_valid_for_instantiation(true, CHECK);
+ InstanceKlass* ik = InstanceKlass::cast(klass);
+ ik->check_valid_for_instantiation(true, CHECK);
// make sure klass is initialized
- h->initialize(CHECK);
+ ik->initialize(CHECK);
// allocate instance and return via TLS
- oop obj = h->allocate_instance(CHECK);
+ oop obj = ik->allocate_instance(CHECK);
thread->set_vm_result(obj);
JRT_BLOCK_END;
@@ -187,7 +187,7 @@
JRT_END
JRT_ENTRY(void, JVMCIRuntime::dynamic_new_instance(JavaThread* thread, oopDesc* type_mirror))
- instanceKlassHandle klass(THREAD, java_lang_Class::as_Klass(type_mirror));
+ InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(type_mirror));
if (klass == NULL) {
ResourceMark rm(THREAD);
@@ -641,7 +641,7 @@
Handle JVMCIRuntime::callStatic(const char* className, const char* methodName, const char* signature, JavaCallArguments* args, TRAPS) {
TempNewSymbol name = SymbolTable::new_symbol(className, CHECK_(Handle()));
- KlassHandle klass = SystemDictionary::resolve_or_fail(name, true, CHECK_(Handle()));
+ Klass* klass = SystemDictionary::resolve_or_fail(name, true, CHECK_(Handle()));
TempNewSymbol runtime = SymbolTable::new_symbol(methodName, CHECK_(Handle()));
TempNewSymbol sig = SymbolTable::new_symbol(signature, CHECK_(Handle()));
JavaValue result(T_OBJECT);
@@ -657,7 +657,7 @@
guarantee(!_HotSpotJVMCIRuntime_initialized, "cannot reinitialize HotSpotJVMCIRuntime");
JVMCIRuntime::initialize_well_known_classes(CHECK);
// This should only be called in the context of the JVMCI class being initialized
- instanceKlassHandle klass = InstanceKlass::cast(SystemDictionary::JVMCI_klass());
+ InstanceKlass* klass = SystemDictionary::JVMCI_klass();
guarantee(klass->is_being_initialized() && klass->is_reentrant_initialization(THREAD),
"HotSpotJVMCIRuntime initialization should only be triggered through JVMCI initialization");
--- a/hotspot/src/share/vm/memory/universe.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/memory/universe.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -460,9 +460,8 @@
Klass* k = list->at(i);
assert(k->is_klass(), "List should only hold classes");
EXCEPTION_MARK;
- KlassHandle kh(THREAD, k);
- java_lang_Class::fixup_mirror(kh, CATCH);
-}
+ java_lang_Class::fixup_mirror(k, CATCH);
+ }
delete java_lang_Class::fixup_mirror_list();
java_lang_Class::set_fixup_mirror_list(NULL);
}
@@ -506,7 +505,7 @@
log_trace(ref)("Callback to run finalizers on exit");
{
PRESERVE_EXCEPTION_MARK;
- KlassHandle finalizer_klass(THREAD, SystemDictionary::Finalizer_klass());
+ Klass* finalizer_klass = SystemDictionary::Finalizer_klass();
JavaValue result(T_VOID);
JavaCalls::call_static(
&result,
@@ -525,16 +524,15 @@
// 1) we specified true to initialize_vtable and
// 2) this ran after gc was enabled
// In case those ever change we use handles for oops
-void Universe::reinitialize_vtable_of(KlassHandle k_h, TRAPS) {
+void Universe::reinitialize_vtable_of(Klass* ko, TRAPS) {
// init vtable of k and all subclasses
- Klass* ko = k_h();
klassVtable* vt = ko->vtable();
if (vt) vt->initialize_vtable(false, CHECK);
if (ko->is_instance_klass()) {
- for (KlassHandle s_h(THREAD, ko->subklass());
- s_h() != NULL;
- s_h = KlassHandle(THREAD, s_h()->next_sibling())) {
- reinitialize_vtable_of(s_h, CHECK);
+ for (Klass* sk = ko->subklass();
+ sk != NULL;
+ sk = sk->next_sibling()) {
+ reinitialize_vtable_of(sk, CHECK);
}
}
}
@@ -964,28 +962,26 @@
Interpreter::initialize(); // needed for interpreter entry points
if (!UseSharedSpaces) {
HandleMark hm(THREAD);
- KlassHandle ok_h(THREAD, SystemDictionary::Object_klass());
- Universe::reinitialize_vtable_of(ok_h, CHECK_false);
+ Klass* ok = SystemDictionary::Object_klass();
+ Universe::reinitialize_vtable_of(ok, CHECK_false);
Universe::reinitialize_itables(CHECK_false);
}
}
HandleMark hm(THREAD);
- Klass* k;
- instanceKlassHandle k_h;
// Setup preallocated empty java.lang.Class array
Universe::_the_empty_class_klass_array = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_false);
// Setup preallocated OutOfMemoryError errors
- k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_OutOfMemoryError(), true, CHECK_false);
- k_h = instanceKlassHandle(THREAD, k);
- Universe::_out_of_memory_error_java_heap = k_h->allocate_instance(CHECK_false);
- Universe::_out_of_memory_error_metaspace = k_h->allocate_instance(CHECK_false);
- Universe::_out_of_memory_error_class_metaspace = k_h->allocate_instance(CHECK_false);
- Universe::_out_of_memory_error_array_size = k_h->allocate_instance(CHECK_false);
+ Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_OutOfMemoryError(), true, CHECK_false);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ Universe::_out_of_memory_error_java_heap = ik->allocate_instance(CHECK_false);
+ Universe::_out_of_memory_error_metaspace = ik->allocate_instance(CHECK_false);
+ Universe::_out_of_memory_error_class_metaspace = ik->allocate_instance(CHECK_false);
+ Universe::_out_of_memory_error_array_size = ik->allocate_instance(CHECK_false);
Universe::_out_of_memory_error_gc_overhead_limit =
- k_h->allocate_instance(CHECK_false);
- Universe::_out_of_memory_error_realloc_objects = k_h->allocate_instance(CHECK_false);
+ ik->allocate_instance(CHECK_false);
+ Universe::_out_of_memory_error_realloc_objects = ik->allocate_instance(CHECK_false);
// Setup preallocated cause message for delayed StackOverflowError
if (StackReservedPages > 0) {
@@ -1006,8 +1002,8 @@
vmSymbols::java_lang_VirtualMachineError(), true, CHECK_false);
bool linked = InstanceKlass::cast(k)->link_class_or_fail(CHECK_false);
if (!linked) {
- tty->print_cr("Unable to link/verify VirtualMachineError class");
- return false; // initialization failed
+ tty->print_cr("Unable to link/verify VirtualMachineError class");
+ return false; // initialization failed
}
Universe::_virtual_machine_error_instance =
InstanceKlass::cast(k)->allocate_instance(CHECK_false);
@@ -1040,12 +1036,12 @@
// Setup the array of errors that have preallocated backtrace
k = Universe::_out_of_memory_error_java_heap->klass();
assert(k->name() == vmSymbols::java_lang_OutOfMemoryError(), "should be out of memory error");
- k_h = instanceKlassHandle(THREAD, k);
+ ik = InstanceKlass::cast(k);
int len = (StackTraceInThrowable) ? (int)PreallocatedOutOfMemoryErrorCount : 0;
- Universe::_preallocated_out_of_memory_error_array = oopFactory::new_objArray(k_h(), len, CHECK_false);
+ Universe::_preallocated_out_of_memory_error_array = oopFactory::new_objArray(ik, len, CHECK_false);
for (int i=0; i<len; i++) {
- oop err = k_h->allocate_instance(CHECK_false);
+ oop err = ik->allocate_instance(CHECK_false);
Handle err_h = Handle(THREAD, err);
java_lang_Throwable::allocate_backtrace(err_h, CHECK_false);
Universe::preallocated_out_of_memory_errors()->obj_at_put(i, err_h());
--- a/hotspot/src/share/vm/memory/universe.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/memory/universe.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -230,7 +230,7 @@
static void initialize_basic_type_mirrors(TRAPS);
static void fixup_mirrors(TRAPS);
- static void reinitialize_vtable_of(KlassHandle h_k, TRAPS);
+ static void reinitialize_vtable_of(Klass* k, TRAPS);
static void reinitialize_itables(TRAPS);
static void compute_base_vtable_size(); // compute vtable size of class Object
--- a/hotspot/src/share/vm/oops/arrayKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/arrayKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -96,9 +96,9 @@
// Initialization of vtables and mirror object is done separatly from base_create_array_klass,
// since a GC can happen. At this point all instance variables of the ArrayKlass must be setup.
-void ArrayKlass::complete_create_array_klass(ArrayKlass* k, KlassHandle super_klass, ModuleEntry* module_entry, TRAPS) {
+void ArrayKlass::complete_create_array_klass(ArrayKlass* k, Klass* super_klass, ModuleEntry* module_entry, TRAPS) {
ResourceMark rm(THREAD);
- k->initialize_supers(super_klass(), CHECK);
+ k->initialize_supers(super_klass, CHECK);
k->vtable()->initialize_vtable(false, CHECK);
// During bootstrapping, before java.base is defined, the module_entry may not be present yet.
--- a/hotspot/src/share/vm/oops/arrayKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/arrayKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -115,7 +115,7 @@
void array_klasses_do(void f(Klass* k, TRAPS), TRAPS);
// Return a handle.
- static void complete_create_array_klass(ArrayKlass* k, KlassHandle super_klass, ModuleEntry* module, TRAPS);
+ static void complete_create_array_klass(ArrayKlass* k, Klass* super_klass, ModuleEntry* module, TRAPS);
// jvm support
--- a/hotspot/src/share/vm/oops/constantPool.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/constantPool.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -193,7 +193,7 @@
resolved_references()->obj_at_put(obj_index, str);
}
-void ConstantPool::trace_class_resolution(const constantPoolHandle& this_cp, KlassHandle k) {
+void ConstantPool::trace_class_resolution(const constantPoolHandle& this_cp, Klass* k) {
ResourceMark rm;
int line_number = -1;
const char * source_file = NULL;
@@ -208,7 +208,7 @@
}
}
}
- if (k() != this_cp->pool_holder()) {
+ if (k != this_cp->pool_holder()) {
// only print something if the classes are different
if (source_file != NULL) {
log_debug(class, resolve)("%s %s %s:%d",
@@ -254,11 +254,10 @@
Symbol* name = entry.get_symbol();
Handle loader (THREAD, this_cp->pool_holder()->class_loader());
Handle protection_domain (THREAD, this_cp->pool_holder()->protection_domain());
- Klass* kk = SystemDictionary::resolve_or_fail(name, loader, protection_domain, true, THREAD);
- KlassHandle k (THREAD, kk);
+ Klass* k = SystemDictionary::resolve_or_fail(name, loader, protection_domain, true, THREAD);
if (!HAS_PENDING_EXCEPTION) {
// preserve the resolved klass from unloading
- mirror_handle = Handle(THREAD, kk->java_mirror());
+ mirror_handle = Handle(THREAD, k->java_mirror());
// Do access check for klasses
verify_constant_pool_resolve(this_cp, k, THREAD);
}
@@ -282,13 +281,13 @@
// Make this class loader depend upon the class loader owning the class reference
ClassLoaderData* this_key = this_cp->pool_holder()->class_loader_data();
- this_key->record_dependency(k(), CHECK_NULL); // Can throw OOM
+ this_key->record_dependency(k, CHECK_NULL); // Can throw OOM
// logging for class+resolve.
if (log_is_enabled(Debug, class, resolve)){
trace_class_resolution(this_cp, k);
}
- this_cp->klass_at_put(which, k());
+ this_cp->klass_at_put(which, k);
entry = this_cp->resolved_klass_at(which);
assert(entry.is_resolved() && entry.get_klass()->is_klass(), "must be resolved at this point");
return entry.get_klass();
@@ -317,14 +316,13 @@
if (k != NULL) {
// Make sure that resolving is legal
EXCEPTION_MARK;
- KlassHandle klass(THREAD, k);
// return NULL if verification fails
- verify_constant_pool_resolve(this_cp, klass, THREAD);
+ verify_constant_pool_resolve(this_cp, k, THREAD);
if (HAS_PENDING_EXCEPTION) {
CLEAR_PENDING_EXCEPTION;
return NULL;
}
- return klass();
+ return k;
} else {
return k;
}
@@ -456,16 +454,15 @@
}
-void ConstantPool::verify_constant_pool_resolve(const constantPoolHandle& this_cp, KlassHandle k, TRAPS) {
+void ConstantPool::verify_constant_pool_resolve(const constantPoolHandle& this_cp, Klass* k, TRAPS) {
if (k->is_instance_klass() || k->is_objArray_klass()) {
- instanceKlassHandle holder (THREAD, this_cp->pool_holder());
- Klass* elem = k->is_instance_klass() ? k() : ObjArrayKlass::cast(k())->bottom_klass();
- KlassHandle element (THREAD, elem);
+ InstanceKlass* holder = this_cp->pool_holder();
+ Klass* elem = k->is_instance_klass() ? k : ObjArrayKlass::cast(k)->bottom_klass();
// The element type could be a typeArray - we only need the access check if it is
// an reference to another class
- if (element->is_instance_klass()) {
- LinkResolver::check_klass_accessability(holder, element, CHECK);
+ if (elem->is_instance_klass()) {
+ LinkResolver::check_klass_accessability(holder, elem, CHECK);
}
}
}
@@ -693,8 +690,7 @@
callee_index, name->as_C_string(), signature->as_C_string());
}
- Klass* k = klass_at_impl(this_cp, callee_index, true, CHECK_NULL);
- KlassHandle callee(THREAD, k);
+ Klass* callee = klass_at_impl(this_cp, callee_index, true, CHECK_NULL);
// Check constant pool method consistency
if ((callee->is_interface() && m_tag.is_method()) ||
@@ -710,7 +706,7 @@
THROW_MSG_NULL(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
}
- KlassHandle klass(THREAD, this_cp->pool_holder());
+ Klass* klass = this_cp->pool_holder();
Handle value = SystemDictionary::link_method_handle_constant(klass, ref_kind,
callee, name, signature,
THREAD);
@@ -729,7 +725,7 @@
index, this_cp->method_type_index_at(index),
signature->as_C_string());
}
- KlassHandle klass(THREAD, this_cp->pool_holder());
+ Klass* klass = this_cp->pool_holder();
Handle value = SystemDictionary::find_method_handle_type(signature, klass, THREAD);
result_oop = value();
if (HAS_PENDING_EXCEPTION) {
@@ -845,8 +841,7 @@
}
-bool ConstantPool::klass_name_at_matches(instanceKlassHandle k,
- int which) {
+bool ConstantPool::klass_name_at_matches(const InstanceKlass* k, int which) {
// Names are interned, so we can compare Symbol*s directly
Symbol* cp_name = klass_name_at(which);
return (cp_name == k->name());
--- a/hotspot/src/share/vm/oops/constantPool.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/constantPool.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -693,7 +693,7 @@
}
// Klass name matches name at offset
- bool klass_name_at_matches(instanceKlassHandle k, int which);
+ bool klass_name_at_matches(const InstanceKlass* k, int which);
// Sizing
int length() const { return _length; }
@@ -784,7 +784,7 @@
}
// Performs the LinkResolver checks
- static void verify_constant_pool_resolve(const constantPoolHandle& this_cp, KlassHandle klass, TRAPS);
+ static void verify_constant_pool_resolve(const constantPoolHandle& this_cp, Klass* klass, TRAPS);
// Implementation of methods that needs an exposed 'this' pointer, in order to
// handle GC while executing the method
@@ -792,7 +792,7 @@
bool save_resolution_error, TRAPS);
static oop string_at_impl(const constantPoolHandle& this_cp, int which, int obj_index, TRAPS);
- static void trace_class_resolution(const constantPoolHandle& this_cp, KlassHandle k);
+ static void trace_class_resolution(const constantPoolHandle& this_cp, Klass* k);
// Resolve string constants (to prevent allocation during compilation)
static void resolve_string_constants_impl(const constantPoolHandle& this_cp, TRAPS);
--- a/hotspot/src/share/vm/oops/cpCache.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/cpCache.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -101,14 +101,14 @@
// are updated, lest other processors see a non-zero bytecode but zero f1/f2.
void ConstantPoolCacheEntry::set_field(Bytecodes::Code get_code,
Bytecodes::Code put_code,
- KlassHandle field_holder,
+ Klass* field_holder,
int field_index,
int field_offset,
TosState field_type,
bool is_final,
bool is_volatile,
Klass* root_klass) {
- set_f1(field_holder());
+ set_f1(field_holder);
set_f2(field_offset);
assert((field_index & field_index_mask) == field_index,
"field index does not fit in low flag bits");
--- a/hotspot/src/share/vm/oops/cpCache.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/cpCache.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, 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
@@ -217,7 +217,7 @@
void set_field( // sets entry to resolved field state
Bytecodes::Code get_code, // the bytecode used for reading the field
Bytecodes::Code put_code, // the bytecode used for writing the field
- KlassHandle field_holder, // the object/klass holding the field
+ Klass* field_holder, // the object/klass holding the field
int orig_field_index, // the original field index in the field holder
int field_offset, // the field offset in words in the field holder
TosState field_type, // the (machine) field type
--- a/hotspot/src/share/vm/oops/fieldStreams.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/fieldStreams.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, 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
@@ -107,14 +107,6 @@
init_generic_signature_start_slot();
assert(klass == field_holder(), "");
}
- FieldStreamBase(instanceKlassHandle klass) {
- _fields = klass->fields();
- _constants = klass->constants();
- _index = 0;
- _limit = klass->java_fields_count();
- init_generic_signature_start_slot();
- assert(klass == field_holder(), "");
- }
// accessors
int index() const { return _index; }
@@ -196,7 +188,7 @@
// Iterate over only the internal fields
class JavaFieldStream : public FieldStreamBase {
public:
- JavaFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {}
+ JavaFieldStream(const InstanceKlass* k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {}
int name_index() const {
assert(!field()->is_internal(), "regular only");
@@ -245,7 +237,6 @@
class InternalFieldStream : public FieldStreamBase {
public:
InternalFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {}
- InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {}
};
@@ -253,7 +244,6 @@
public:
AllFieldStream(Array<u2>* fields, const constantPoolHandle& constants): FieldStreamBase(fields, constants) {}
AllFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {}
- AllFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants()) {}
};
#endif // SHARE_VM_OOPS_FIELDSTREAMS_HPP
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -374,7 +374,7 @@
}
klassItable* InstanceKlass::itable() const {
- return new klassItable(instanceKlassHandle(this));
+ return new klassItable(const_cast<InstanceKlass*>(this));
}
void InstanceKlass::eager_initialize(Thread *thread) {
@@ -392,8 +392,7 @@
if (!InstanceKlass::cast(super)->is_initialized()) return;
// call body to expose the this pointer
- instanceKlassHandle this_k(thread, this);
- eager_initialize_impl(this_k);
+ eager_initialize_impl(this);
}
}
@@ -432,7 +431,7 @@
assert(!is_not_initialized(), "class must be initialized now");
}
-void InstanceKlass::eager_initialize_impl(instanceKlassHandle this_k) {
+void InstanceKlass::eager_initialize_impl(InstanceKlass* this_k) {
EXCEPTION_MARK;
HandleMark hm(THREAD);
Handle init_lock(THREAD, this_k->init_lock());
@@ -470,8 +469,7 @@
// Note: implementation moved to static method to expose the this pointer.
void InstanceKlass::initialize(TRAPS) {
if (this->should_be_initialized()) {
- instanceKlassHandle this_k(THREAD, this);
- initialize_impl(this_k, CHECK);
+ initialize_impl(this, CHECK);
// Note: at this point the class may be initialized
// OR it may be in the state of being initialized
// in case of recursive initialization!
@@ -482,7 +480,7 @@
bool InstanceKlass::verify_code(
- instanceKlassHandle this_k, bool throw_verifyerror, TRAPS) {
+ InstanceKlass* this_k, bool throw_verifyerror, TRAPS) {
// 1) Verify the bytecodes
Verifier::Mode mode =
throw_verifyerror ? Verifier::ThrowException : Verifier::NoException;
@@ -501,8 +499,7 @@
void InstanceKlass::link_class(TRAPS) {
assert(is_loaded(), "must be loaded");
if (!is_linked()) {
- instanceKlassHandle this_k(THREAD, this);
- link_class_impl(this_k, true, CHECK);
+ link_class_impl(this, true, CHECK);
}
}
@@ -511,14 +508,13 @@
bool InstanceKlass::link_class_or_fail(TRAPS) {
assert(is_loaded(), "must be loaded");
if (!is_linked()) {
- instanceKlassHandle this_k(THREAD, this);
- link_class_impl(this_k, false, CHECK_false);
+ link_class_impl(this, false, CHECK_false);
}
return is_linked();
}
bool InstanceKlass::link_class_impl(
- instanceKlassHandle this_k, bool throw_verifyerror, TRAPS) {
+ InstanceKlass* this_k, bool throw_verifyerror, TRAPS) {
if (DumpSharedSpaces && this_k->is_in_error_state()) {
// This is for CDS dumping phase only -- we use the in_error_state to indicate that
// the class has failed verification. Throwing the NoClassDefFoundError here is just
@@ -542,8 +538,8 @@
JavaThread* jt = (JavaThread*)THREAD;
// link super class before linking this class
- instanceKlassHandle super(THREAD, this_k->super());
- if (super.not_null()) {
+ Klass* super = this_k->super();
+ if (super != NULL) {
if (super->is_interface()) { // check if super class is an interface
ResourceMark rm(THREAD);
Exceptions::fthrow(
@@ -556,15 +552,16 @@
return false;
}
- link_class_impl(super, throw_verifyerror, CHECK_false);
+ InstanceKlass* ik_super = InstanceKlass::cast(super);
+ link_class_impl(ik_super, throw_verifyerror, CHECK_false);
}
// link all interfaces implemented by this class before linking this class
Array<Klass*>* interfaces = this_k->local_interfaces();
int num_interfaces = interfaces->length();
for (int index = 0; index < num_interfaces; index++) {
- instanceKlassHandle ih(THREAD, interfaces->at(index));
- link_class_impl(ih, throw_verifyerror, CHECK_false);
+ InstanceKlass* interk = InstanceKlass::cast(interfaces->at(index));
+ link_class_impl(interk, throw_verifyerror, CHECK_false);
}
// in case the class is linked in the process of linking its superclasses
@@ -642,7 +639,7 @@
if (JvmtiExport::should_post_class_prepare()) {
Thread *thread = THREAD;
assert(thread->is_Java_thread(), "thread->is_Java_thread()");
- JvmtiExport::post_class_prepare((JavaThread *) thread, this_k());
+ JvmtiExport::post_class_prepare((JavaThread *) thread, this_k);
}
}
}
@@ -655,13 +652,12 @@
// verification but before the first method of the class is executed.
void InstanceKlass::rewrite_class(TRAPS) {
assert(is_loaded(), "must be loaded");
- instanceKlassHandle this_k(THREAD, this);
- if (this_k->is_rewritten()) {
- assert(this_k()->is_shared(), "rewriting an unshared class?");
+ if (is_rewritten()) {
+ assert(is_shared(), "rewriting an unshared class?");
return;
}
- Rewriter::rewrite(this_k, CHECK);
- this_k->set_rewritten();
+ Rewriter::rewrite(this, CHECK);
+ set_rewritten();
}
// Now relocate and link method entry points after class is rewritten.
@@ -678,7 +674,7 @@
}
// Eagerly initialize superinterfaces that declare default methods (concrete instance: any access)
-void InstanceKlass::initialize_super_interfaces(instanceKlassHandle this_k, TRAPS) {
+void InstanceKlass::initialize_super_interfaces(InstanceKlass* this_k, TRAPS) {
assert (this_k->has_nonstatic_concrete_methods(), "caller should have checked this");
for (int i = 0; i < this_k->local_interfaces()->length(); ++i) {
Klass* iface = this_k->local_interfaces()->at(i);
@@ -698,14 +694,14 @@
}
}
-void InstanceKlass::initialize_impl(instanceKlassHandle this_k, TRAPS) {
+void InstanceKlass::initialize_impl(InstanceKlass* this_k, TRAPS) {
HandleMark hm(THREAD);
// Make sure klass is linked (verified) before initialization
// A class could already be verified, since it has been reflected upon.
this_k->link_class(CHECK);
- DTRACE_CLASSINIT_PROBE(required, this_k(), -1);
+ DTRACE_CLASSINIT_PROBE(required, this_k, -1);
bool wait = false;
@@ -728,19 +724,19 @@
// Step 3
if (this_k->is_being_initialized() && this_k->is_reentrant_initialization(self)) {
- DTRACE_CLASSINIT_PROBE_WAIT(recursive, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(recursive, this_k, -1,wait);
return;
}
// Step 4
if (this_k->is_initialized()) {
- DTRACE_CLASSINIT_PROBE_WAIT(concurrent, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(concurrent, this_k, -1,wait);
return;
}
// Step 5
if (this_k->is_in_error_state()) {
- DTRACE_CLASSINIT_PROBE_WAIT(erroneous, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(erroneous, this_k, -1,wait);
ResourceMark rm(THREAD);
const char* desc = "Could not initialize class ";
const char* className = this_k->external_name();
@@ -786,7 +782,7 @@
this_k->set_initialization_state_and_notify(initialization_error, THREAD);
CLEAR_PENDING_EXCEPTION;
}
- DTRACE_CLASSINIT_PROBE_WAIT(super__failed, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(super__failed, this_k, -1,wait);
THROW_OOP(e());
}
}
@@ -799,7 +795,7 @@
{
assert(THREAD->is_Java_thread(), "non-JavaThread in initialize_impl");
JavaThread* jt = (JavaThread*)THREAD;
- DTRACE_CLASSINIT_PROBE_WAIT(clinit, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(clinit, this_k, -1,wait);
// Timer includes any side effects of class initialization (resolution,
// etc), but not recursive entry into call_class_initializer().
PerfClassTraceTime timer(ClassLoader::perf_class_init_time(),
@@ -833,7 +829,7 @@
// JVMTI internal flag reset is needed in order to report ExceptionInInitializerError
JvmtiExport::clear_detected_exception((JavaThread*)THREAD);
}
- DTRACE_CLASSINIT_PROBE_WAIT(error, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(error, this_k, -1,wait);
if (e->is_a(SystemDictionary::Error_klass())) {
THROW_OOP(e());
} else {
@@ -843,17 +839,16 @@
&args);
}
}
- DTRACE_CLASSINIT_PROBE_WAIT(end, this_k(), -1,wait);
+ DTRACE_CLASSINIT_PROBE_WAIT(end, this_k, -1,wait);
}
// Note: implementation moved to static method to expose the this pointer.
void InstanceKlass::set_initialization_state_and_notify(ClassState state, TRAPS) {
- instanceKlassHandle kh(THREAD, this);
- set_initialization_state_and_notify_impl(kh, state, CHECK);
+ set_initialization_state_and_notify_impl(this, state, CHECK);
}
-void InstanceKlass::set_initialization_state_and_notify_impl(instanceKlassHandle this_k, ClassState state, TRAPS) {
+void InstanceKlass::set_initialization_state_and_notify_impl(InstanceKlass* this_k, ClassState state, TRAPS) {
Handle init_lock(THREAD, this_k->init_lock());
if (init_lock() != NULL) {
ObjectLocker ol(init_lock, THREAD);
@@ -995,9 +990,8 @@
}
int size = objArrayOopDesc::object_size(length);
Klass* ak = array_klass(n, CHECK_NULL);
- KlassHandle h_ak (THREAD, ak);
objArrayOop o =
- (objArrayOop)CollectedHeap::array_allocate(h_ak, size, length, CHECK_NULL);
+ (objArrayOop)CollectedHeap::array_allocate(ak, size, length, CHECK_NULL);
return o;
}
@@ -1020,11 +1014,9 @@
bool has_finalizer_flag = has_finalizer(); // Query before possible GC
int size = size_helper(); // Query before forming handle.
- KlassHandle h_k(THREAD, this);
-
instanceOop i;
- i = (instanceOop)CollectedHeap::obj_allocate(h_k, size, CHECK_NULL);
+ i = (instanceOop)CollectedHeap::obj_allocate(this, size, CHECK_NULL);
if (has_finalizer_flag && !RegisterFinalizersAtInit) {
i = register_finalizer(i, CHECK_NULL);
}
@@ -1045,11 +1037,10 @@
}
Klass* InstanceKlass::array_klass_impl(bool or_null, int n, TRAPS) {
- instanceKlassHandle this_k(THREAD, this);
- return array_klass_impl(this_k, or_null, n, THREAD);
+ return array_klass_impl(this, or_null, n, THREAD);
}
-Klass* InstanceKlass::array_klass_impl(instanceKlassHandle this_k, bool or_null, int n, TRAPS) {
+Klass* InstanceKlass::array_klass_impl(InstanceKlass* this_k, bool or_null, int n, TRAPS) {
// Need load-acquire for lock-free read
if (this_k->array_klasses_acquire() == NULL) {
if (or_null) return NULL;
@@ -1082,13 +1073,12 @@
}
void InstanceKlass::call_class_initializer(TRAPS) {
- instanceKlassHandle ik (THREAD, this);
- call_class_initializer_impl(ik, THREAD);
+ call_class_initializer_impl(this, THREAD);
}
static int call_class_initializer_impl_counter = 0; // for debugging
-Method* InstanceKlass::class_initializer() {
+Method* InstanceKlass::class_initializer() const {
Method* clinit = find_method(
vmSymbols::class_initializer_name(), vmSymbols::void_method_signature());
if (clinit != NULL && clinit->has_valid_initializer_flags()) {
@@ -1097,7 +1087,7 @@
return NULL;
}
-void InstanceKlass::call_class_initializer_impl(instanceKlassHandle this_k, TRAPS) {
+void InstanceKlass::call_class_initializer_impl(InstanceKlass* this_k, TRAPS) {
if (ReplayCompiles &&
(ReplaySuppressInitializers == 1 ||
ReplaySuppressInitializers >= 2 && this_k->class_loader() != NULL)) {
@@ -1112,7 +1102,7 @@
outputStream* log = Log(class, init)::info_stream();
log->print("%d Initializing ", call_class_initializer_impl_counter++);
this_k->name()->print_value_on(log);
- log->print_cr("%s (" INTPTR_FORMAT ")", h_method() == NULL ? "(no method)" : "", p2i(this_k()));
+ log->print_cr("%s (" INTPTR_FORMAT ")", h_method() == NULL ? "(no method)" : "", p2i(this_k));
}
if (h_method() != NULL) {
JavaCallArguments args; // No arguments
@@ -1263,14 +1253,13 @@
void InstanceKlass::do_local_static_fields(void f(fieldDescriptor*, Handle, TRAPS), Handle mirror, TRAPS) {
- instanceKlassHandle h_this(THREAD, this);
- do_local_static_fields_impl(h_this, f, mirror, CHECK);
+ do_local_static_fields_impl(this, f, mirror, CHECK);
}
-void InstanceKlass::do_local_static_fields_impl(instanceKlassHandle this_k,
+void InstanceKlass::do_local_static_fields_impl(InstanceKlass* this_k,
void f(fieldDescriptor* fd, Handle, TRAPS), Handle mirror, TRAPS) {
- for (JavaFieldStream fs(this_k()); !fs.done(); fs.next()) {
+ for (JavaFieldStream fs(this_k); !fs.done(); fs.next()) {
if (fs.access_flags().is_static()) {
fieldDescriptor& fd = fs.field_descriptor();
f(&fd, mirror, CHECK);
@@ -1629,13 +1618,13 @@
}
/* jni_id_for_impl for jfieldIds only */
-JNIid* InstanceKlass::jni_id_for_impl(instanceKlassHandle this_k, int offset) {
+JNIid* InstanceKlass::jni_id_for_impl(InstanceKlass* this_k, int offset) {
MutexLocker ml(JfieldIdCreation_lock);
// Retry lookup after we got the lock
JNIid* probe = this_k->jni_ids() == NULL ? NULL : this_k->jni_ids()->find(offset);
if (probe == NULL) {
// Slow case, allocate new static field identifier
- probe = new JNIid(this_k(), offset, this_k->jni_ids());
+ probe = new JNIid(this_k, offset, this_k->jni_ids());
this_k->set_jni_ids(probe);
}
return probe;
@@ -1684,9 +1673,9 @@
// locking has to be done very carefully to avoid deadlocks
// and/or other cache consistency problems.
//
-jmethodID InstanceKlass::get_jmethod_id(instanceKlassHandle ik_h, const methodHandle& method_h) {
+jmethodID InstanceKlass::get_jmethod_id(InstanceKlass* ik, const methodHandle& method_h) {
size_t idnum = (size_t)method_h->method_idnum();
- jmethodID* jmeths = ik_h->methods_jmethod_ids_acquire();
+ jmethodID* jmeths = ik->methods_jmethod_ids_acquire();
size_t length = 0;
jmethodID id = NULL;
@@ -1710,7 +1699,7 @@
if (jmeths != NULL) {
// the cache already exists
- if (!ik_h->idnum_can_increment()) {
+ if (!ik->idnum_can_increment()) {
// the cache can't grow so we can just get the current values
get_jmethod_id_length_value(jmeths, idnum, &length, &id);
} else {
@@ -1744,7 +1733,7 @@
jmethodID* new_jmeths = NULL;
if (length <= idnum) {
// allocate a new cache that might be used
- size_t size = MAX2(idnum+1, (size_t)ik_h->idnum_allocated_count());
+ size_t size = MAX2(idnum+1, (size_t)ik->idnum_allocated_count());
new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1, mtClass);
memset(new_jmeths, 0, (size+1)*sizeof(jmethodID));
// cache size is stored in element[0], other elements offset by one
@@ -1755,23 +1744,23 @@
jmethodID new_id = NULL;
if (method_h->is_old() && !method_h->is_obsolete()) {
// The method passed in is old (but not obsolete), we need to use the current version
- Method* current_method = ik_h->method_with_idnum((int)idnum);
+ Method* current_method = ik->method_with_idnum((int)idnum);
assert(current_method != NULL, "old and but not obsolete, so should exist");
- new_id = Method::make_jmethod_id(ik_h->class_loader_data(), current_method);
+ new_id = Method::make_jmethod_id(ik->class_loader_data(), current_method);
} else {
// It is the current version of the method or an obsolete method,
// use the version passed in
- new_id = Method::make_jmethod_id(ik_h->class_loader_data(), method_h());
+ new_id = Method::make_jmethod_id(ik->class_loader_data(), method_h());
}
if (Threads::number_of_threads() == 0 ||
SafepointSynchronize::is_at_safepoint()) {
// we're single threaded or at a safepoint - no locking needed
- id = get_jmethod_id_fetch_or_update(ik_h, idnum, new_id, new_jmeths,
+ id = get_jmethod_id_fetch_or_update(ik, idnum, new_id, new_jmeths,
&to_dealloc_id, &to_dealloc_jmeths);
} else {
MutexLocker ml(JmethodIdCreation_lock);
- id = get_jmethod_id_fetch_or_update(ik_h, idnum, new_id, new_jmeths,
+ id = get_jmethod_id_fetch_or_update(ik, idnum, new_id, new_jmeths,
&to_dealloc_id, &to_dealloc_jmeths);
}
@@ -1782,7 +1771,7 @@
}
// free up the new ID since it wasn't needed
if (to_dealloc_id != NULL) {
- Method::destroy_jmethod_id(ik_h->class_loader_data(), to_dealloc_id);
+ Method::destroy_jmethod_id(ik->class_loader_data(), to_dealloc_id);
}
}
return id;
@@ -1814,7 +1803,7 @@
// the VMThread or have cache consistency issues.
//
jmethodID InstanceKlass::get_jmethod_id_fetch_or_update(
- instanceKlassHandle ik_h, size_t idnum, jmethodID new_id,
+ InstanceKlass* ik, size_t idnum, jmethodID new_id,
jmethodID* new_jmeths, jmethodID* to_dealloc_id_p,
jmethodID** to_dealloc_jmeths_p) {
assert(new_id != NULL, "sanity check");
@@ -1825,7 +1814,7 @@
JmethodIdCreation_lock->owned_by_self(), "sanity check");
// reacquire the cache - we are locked, single threaded or at a safepoint
- jmethodID* jmeths = ik_h->methods_jmethod_ids_acquire();
+ jmethodID* jmeths = ik->methods_jmethod_ids_acquire();
jmethodID id = NULL;
size_t length = 0;
@@ -1838,7 +1827,7 @@
}
*to_dealloc_jmeths_p = jmeths; // save old cache for later delete
}
- ik_h->release_set_methods_jmethod_ids(jmeths = new_jmeths);
+ ik->release_set_methods_jmethod_ids(jmeths = new_jmeths);
} else {
// fetch jmethodID (if any) from the existing cache
id = jmeths[idnum+1];
@@ -2058,11 +2047,10 @@
}
void InstanceKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) {
- instanceKlassHandle ik(THREAD, this);
- ik->set_package(loader_data, CHECK);
+ set_package(loader_data, CHECK);
Klass::restore_unshareable_info(loader_data, protection_domain, CHECK);
- Array<Method*>* methods = ik->methods();
+ Array<Method*>* methods = this->methods();
int num_methods = methods->length();
for (int index2 = 0; index2 < num_methods; ++index2) {
methodHandle m(THREAD, methods->at(index2));
@@ -2075,14 +2063,14 @@
// vtables in the shared system dictionary, only the main one.
// It also redefines the itable too so fix that too.
ResourceMark rm(THREAD);
- ik->vtable()->initialize_vtable(false, CHECK);
- ik->itable()->initialize_itable(false, CHECK);
+ vtable()->initialize_vtable(false, CHECK);
+ itable()->initialize_itable(false, CHECK);
}
// restore constant pool resolved references
- ik->constants()->restore_unshareable_info(CHECK);
-
- ik->array_klasses_do(restore_unshareable_in_class, CHECK);
+ constants()->restore_unshareable_info(CHECK);
+
+ array_klasses_do(restore_unshareable_in_class, CHECK);
}
// returns true IFF is_in_error_state() has been changed as a result of this call.
@@ -2448,7 +2436,7 @@
}
/* defined for now in jvm.cpp, for historical reasons *--
-Klass* InstanceKlass::compute_enclosing_class_impl(instanceKlassHandle self,
+Klass* InstanceKlass::compute_enclosing_class_impl(InstanceKlass* self,
Symbol*& simple_name_result, TRAPS) {
...
}
@@ -2522,7 +2510,7 @@
return false;
}
-bool InstanceKlass::find_inner_classes_attr(instanceKlassHandle k, int* ooff, int* noff, TRAPS) {
+bool InstanceKlass::find_inner_classes_attr(const InstanceKlass* k, int* ooff, int* noff, TRAPS) {
constantPoolHandle i_cp(THREAD, k->constants());
for (InnerClassesIterator iter(k); !iter.done(); iter.next()) {
int ioff = iter.inner_class_info_index();
@@ -2531,7 +2519,7 @@
// before attempting to find the class.
if (i_cp->klass_name_at_matches(k, ioff)) {
Klass* inner_klass = i_cp->klass_at(ioff, CHECK_false);
- if (k() == inner_klass) {
+ if (k == inner_klass) {
*ooff = iter.outer_class_info_index();
*noff = iter.inner_name_index();
return true;
@@ -2580,8 +2568,7 @@
jint access = access_flags().as_int();
// But check if it happens to be member class.
- instanceKlassHandle ik(THREAD, this);
- InnerClassesIterator iter(ik);
+ InnerClassesIterator iter(this);
for (; !iter.done(); iter.next()) {
int ioff = iter.inner_class_info_index();
// Inner class attribute can be zero, skip it.
@@ -2590,8 +2577,8 @@
// only look at classes that are already loaded
// since we are looking for the flags for our self.
- Symbol* inner_name = ik->constants()->klass_name_at(ioff);
- if ((ik->name() == inner_name)) {
+ Symbol* inner_name = constants()->klass_name_at(ioff);
+ if (name() == inner_name) {
// This is really a member class.
access = iter.inner_access_flags();
break;
@@ -3612,7 +3599,7 @@
// Save the scratch_class as the previous version if any of the methods are running.
// The previous_versions are used to set breakpoints in EMCP methods and they are
// also used to clean MethodData links to redefined methods that are no longer running.
-void InstanceKlass::add_previous_version(instanceKlassHandle scratch_class,
+void InstanceKlass::add_previous_version(InstanceKlass* scratch_class,
int emcp_method_count) {
assert(Thread::current()->is_VM_thread(),
"only VMThread can add previous versions");
@@ -3638,7 +3625,7 @@
log_trace(redefine, class, iklass, add)("scratch class not added; no methods are running");
// For debugging purposes.
scratch_class->set_is_scratch_class();
- scratch_class->class_loader_data()->add_to_deallocate_list(scratch_class());
+ scratch_class->class_loader_data()->add_to_deallocate_list(scratch_class);
return;
}
@@ -3671,7 +3658,7 @@
log_trace(redefine, class, iklass, add) ("scratch class added; one of its methods is on_stack.");
assert(scratch_class->previous_versions() == NULL, "shouldn't have a previous version");
scratch_class->link_previous_versions(previous_versions());
- link_previous_versions(scratch_class());
+ link_previous_versions(scratch_class);
} // end add_previous_version()
#endif // INCLUDE_JVMTI
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -472,7 +472,7 @@
TRAPS);
// Find InnerClasses attribute for k and return outer_class_info_index & inner_name_index.
- static bool find_inner_classes_attr(instanceKlassHandle k,
+ static bool find_inner_classes_attr(const InstanceKlass* k,
int* ooff, int* noff, TRAPS);
private:
@@ -524,7 +524,7 @@
void unlink_class();
void rewrite_class(TRAPS);
void link_methods(TRAPS);
- Method* class_initializer();
+ Method* class_initializer() const;
// set the class to initialized if no static initializer is present
void eager_initialize(Thread *thread);
@@ -711,7 +711,7 @@
void set_is_being_redefined(bool value) { _is_being_redefined = value; }
// RedefineClasses() support for previous versions:
- void add_previous_version(instanceKlassHandle ikh, int emcp_method_count);
+ void add_previous_version(InstanceKlass* ik, int emcp_method_count);
void purge_previous_version_list();
InstanceKlass* previous_versions() const { return _previous_versions; }
@@ -883,9 +883,9 @@
u2 method_index);
// jmethodID support
- static jmethodID get_jmethod_id(instanceKlassHandle ik_h,
+ static jmethodID get_jmethod_id(InstanceKlass* ik,
const methodHandle& method_h);
- static jmethodID get_jmethod_id_fetch_or_update(instanceKlassHandle ik_h,
+ static jmethodID get_jmethod_id_fetch_or_update(InstanceKlass* ik,
size_t idnum, jmethodID new_id, jmethodID* new_jmeths,
jmethodID* to_dealloc_id_p,
jmethodID** to_dealloc_jmeths_p);
@@ -1308,17 +1308,17 @@
// Static methods that are used to implement member methods where an exposed this pointer
// is needed due to possible GCs
- static bool link_class_impl (instanceKlassHandle this_k, bool throw_verifyerror, TRAPS);
- static bool verify_code (instanceKlassHandle this_k, bool throw_verifyerror, TRAPS);
- static void initialize_impl (instanceKlassHandle this_k, TRAPS);
- static void initialize_super_interfaces (instanceKlassHandle this_k, TRAPS);
- static void eager_initialize_impl (instanceKlassHandle this_k);
- static void set_initialization_state_and_notify_impl (instanceKlassHandle this_k, ClassState state, TRAPS);
- static void call_class_initializer_impl (instanceKlassHandle this_k, TRAPS);
- static Klass* array_klass_impl (instanceKlassHandle this_k, bool or_null, int n, TRAPS);
- static void do_local_static_fields_impl (instanceKlassHandle this_k, void f(fieldDescriptor* fd, Handle, TRAPS), Handle, TRAPS);
+ static bool link_class_impl (InstanceKlass* this_k, bool throw_verifyerror, TRAPS);
+ static bool verify_code (InstanceKlass* this_k, bool throw_verifyerror, TRAPS);
+ static void initialize_impl (InstanceKlass* this_k, TRAPS);
+ static void initialize_super_interfaces (InstanceKlass* this_k, TRAPS);
+ static void eager_initialize_impl (InstanceKlass* this_k);
+ static void set_initialization_state_and_notify_impl (InstanceKlass* this_k, ClassState state, TRAPS);
+ static void call_class_initializer_impl (InstanceKlass* this_k, TRAPS);
+ static Klass* array_klass_impl (InstanceKlass* this_k, bool or_null, int n, TRAPS);
+ static void do_local_static_fields_impl (InstanceKlass* this_k, void f(fieldDescriptor* fd, Handle, TRAPS), Handle, TRAPS);
/* jni_id_for_impl for jfieldID only */
- static JNIid* jni_id_for_impl (instanceKlassHandle this_k, int offset);
+ static JNIid* jni_id_for_impl (InstanceKlass* this_k, int offset);
// Returns the array class for the n'th dimension
Klass* array_klass_impl(bool or_null, int n, TRAPS);
@@ -1447,7 +1447,7 @@
int _idx;
public:
- InnerClassesIterator(instanceKlassHandle k) {
+ InnerClassesIterator(const InstanceKlass* k) {
_inner_classes = k->inner_classes();
if (k->inner_classes() != NULL) {
_length = _inner_classes->length();
--- a/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, 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
@@ -39,23 +39,21 @@
int InstanceMirrorKlass::_offset_of_static_fields = 0;
-int InstanceMirrorKlass::instance_size(KlassHandle k) {
- if (k() != NULL && k->is_instance_klass()) {
- return align_object_size(size_helper() + InstanceKlass::cast(k())->static_field_size());
+int InstanceMirrorKlass::instance_size(Klass* k) {
+ if (k != NULL && k->is_instance_klass()) {
+ return align_object_size(size_helper() + InstanceKlass::cast(k)->static_field_size());
}
return size_helper();
}
-instanceOop InstanceMirrorKlass::allocate_instance(KlassHandle k, TRAPS) {
+instanceOop InstanceMirrorKlass::allocate_instance(Klass* k, TRAPS) {
// Query before forming handle.
int size = instance_size(k);
- KlassHandle h_k(THREAD, this);
-
assert(size > 0, "total object size must be positive: %d", size);
// Since mirrors can be variable sized because of the static fields, store
// the size in the mirror itself.
- return (instanceOop)CollectedHeap::class_allocate(h_k, size, CHECK_NULL);
+ return (instanceOop)CollectedHeap::class_allocate(this, size, CHECK_NULL);
}
int InstanceMirrorKlass::oop_size(oop obj) const {
--- a/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/instanceMirrorKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, 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
@@ -82,10 +82,10 @@
int compute_static_oop_field_count(oop obj);
// Given a Klass return the size of the instance
- int instance_size(KlassHandle k);
+ int instance_size(Klass* k);
// allocation
- instanceOop allocate_instance(KlassHandle k, TRAPS);
+ instanceOop allocate_instance(Klass* k, TRAPS);
// GC specific object visitors
//
--- a/hotspot/src/share/vm/oops/klass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/klass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -264,7 +264,6 @@
}
if (secondary_supers() == NULL) {
- KlassHandle this_kh (THREAD, this);
// Now compute the list of secondary supertypes.
// Secondaries can occasionally be on the super chain,
@@ -286,7 +285,7 @@
GrowableArray<Klass*>* primaries = new GrowableArray<Klass*>(extras);
- for (p = this_kh->super(); !(p == NULL || p->can_be_primary_super()); p = p->super()) {
+ for (p = super(); !(p == NULL || p->can_be_primary_super()); p = p->super()) {
int i; // Scan for overflow primaries being duplicates of 2nd'arys
// This happens frequently for very deeply nested arrays: the
@@ -324,7 +323,7 @@
}
#endif
- this_kh->set_secondary_supers(s2);
+ set_secondary_supers(s2);
}
}
@@ -698,7 +697,7 @@
}
klassVtable* Klass::vtable() const {
- return new klassVtable(this, start_of_vtable(), vtable_length() / vtableEntry::size());
+ return new klassVtable(const_cast<Klass*>(this), start_of_vtable(), vtable_length() / vtableEntry::size());
}
vtableEntry* Klass::start_of_vtable() const {
--- a/hotspot/src/share/vm/oops/klassVtable.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/klassVtable.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -40,7 +40,7 @@
#include "utilities/copy.hpp"
inline InstanceKlass* klassVtable::ik() const {
- return InstanceKlass::cast(_klass());
+ return InstanceKlass::cast(_klass);
}
bool klassVtable::is_preinitialized_vtable() {
@@ -128,8 +128,8 @@
// Copy super class's vtable to the first part (prefix) of this class's vtable,
// and return the number of entries copied. Expects that 'super' is the Java
// super class (arrays can have "array" super classes that must be skipped).
-int klassVtable::initialize_from_super(KlassHandle super) {
- if (super.is_null()) {
+int klassVtable::initialize_from_super(Klass* super) {
+ if (super == NULL) {
return 0;
} else if (is_preinitialized_vtable()) {
// A shared class' vtable is preinitialized at dump time. No need to copy
@@ -160,18 +160,18 @@
void klassVtable::initialize_vtable(bool checkconstraints, TRAPS) {
// Note: Arrays can have intermediate array supers. Use java_super to skip them.
- KlassHandle super (THREAD, klass()->java_super());
+ Klass* super = _klass->java_super();
int nofNewEntries = 0;
bool is_shared = _klass->is_shared();
- if (!klass()->is_array_klass()) {
+ if (!_klass->is_array_klass()) {
ResourceMark rm(THREAD);
log_develop_debug(vtables)("Initializing: %s", _klass->name()->as_C_string());
}
#ifdef ASSERT
- oop* end_of_obj = (oop*)_klass() + _klass()->size();
+ oop* end_of_obj = (oop*)_klass + _klass->size();
oop* end_of_vtable = (oop*)&table()[_length];
assert(end_of_vtable <= end_of_obj, "vtable extends beyond end");
#endif
@@ -184,7 +184,7 @@
}
int super_vtable_len = initialize_from_super(super);
- if (klass()->is_array_klass()) {
+ if (_klass->is_array_klass()) {
assert(super_vtable_len == _length, "arrays shouldn't introduce new methods");
} else {
assert(_klass->is_instance_klass(), "must be InstanceKlass");
@@ -327,7 +327,7 @@
}
static void log_vtables(int i, bool overrides, methodHandle target_method,
- KlassHandle target_klass, Method* super_method,
+ Klass* target_klass, Method* super_method,
Thread* thread) {
#ifndef PRODUCT
if (log_develop_is_enabled(Trace, vtables)) {
@@ -432,7 +432,7 @@
Symbol* name = target_method()->name();
Symbol* signature = target_method()->signature();
- KlassHandle target_klass(THREAD, target_method()->method_holder());
+ Klass* target_klass = target_method()->method_holder();
if (target_klass == NULL) {
target_klass = _klass;
}
@@ -955,7 +955,7 @@
if (!(*trace_name_printed)) {
log_info(redefine, class, update)
("adjust: klassname=%s for methods from name=%s",
- klass()->external_name(), old_method->method_holder()->external_name());
+ _klass->external_name(), old_method->method_holder()->external_name());
*trace_name_printed = true;
}
log_debug(redefine, class, update, vtables)
@@ -1025,17 +1025,17 @@
}
}
-klassItable::klassItable(instanceKlassHandle klass) {
+klassItable::klassItable(InstanceKlass* klass) {
_klass = klass;
if (klass->itable_length() > 0) {
itableOffsetEntry* offset_entry = (itableOffsetEntry*)klass->start_of_itable();
if (offset_entry != NULL && offset_entry->interface_klass() != NULL) { // Check that itable is initialized
// First offset entry points to the first method_entry
- intptr_t* method_entry = (intptr_t *)(((address)klass()) + offset_entry->offset());
+ intptr_t* method_entry = (intptr_t *)(((address)klass) + offset_entry->offset());
intptr_t* end = klass->end_of_itable();
- _table_offset = (intptr_t*)offset_entry - (intptr_t*)klass();
+ _table_offset = (intptr_t*)offset_entry - (intptr_t*)klass;
_size_offset_table = (method_entry - ((intptr_t*)offset_entry)) / itableOffsetEntry::size();
_size_method_table = (end - method_entry) / itableMethodEntry::size();
assert(_table_offset >= 0 && _size_offset_table >= 0 && _size_method_table >= 0, "wrong computation");
@@ -1056,7 +1056,7 @@
if (_klass->is_interface()) {
// This needs to go after vtable indices are assigned but
// before implementors need to know the number of itable indices.
- assign_itable_indices_for_interface(_klass());
+ assign_itable_indices_for_interface(_klass);
}
// Cannot be setup doing bootstrapping, interfaces don't have
@@ -1078,9 +1078,9 @@
for(i = 0; i < num_interfaces; i++) {
itableOffsetEntry* ioe = offset_entry(i);
HandleMark hm(THREAD);
- KlassHandle interf_h (THREAD, ioe->interface_klass());
- assert(interf_h() != NULL && ioe->offset() != 0, "bad offset entry in itable");
- initialize_itable_for_interface(ioe->offset(), interf_h, checkconstraints, CHECK);
+ Klass* interf = ioe->interface_klass();
+ assert(interf != NULL && ioe->offset() != 0, "bad offset entry in itable");
+ initialize_itable_for_interface(ioe->offset(), interf, checkconstraints, CHECK);
}
}
@@ -1169,14 +1169,14 @@
}
-void klassItable::initialize_itable_for_interface(int method_table_offset, KlassHandle interf_h, bool checkconstraints, TRAPS) {
- Array<Method*>* methods = InstanceKlass::cast(interf_h())->methods();
+void klassItable::initialize_itable_for_interface(int method_table_offset, Klass* interf, bool checkconstraints, TRAPS) {
+ Array<Method*>* methods = InstanceKlass::cast(interf)->methods();
int nof_methods = methods->length();
HandleMark hm;
assert(nof_methods > 0, "at least one method must exist for interface to be in vtable");
- Handle interface_loader (THREAD, InstanceKlass::cast(interf_h())->class_loader());
+ Handle interface_loader (THREAD, InstanceKlass::cast(interf)->class_loader());
- int ime_count = method_count_for_interface(interf_h());
+ int ime_count = method_count_for_interface(interf);
for (int i = 0; i < nof_methods; i++) {
Method* m = methods->at(i);
methodHandle target;
@@ -1189,7 +1189,7 @@
// Entry does not resolve. Leave it empty for AbstractMethodError.
if (!(target == NULL) && !target->is_public()) {
// Stuff an IllegalAccessError throwing method in there instead.
- itableOffsetEntry::method_entry(_klass(), method_table_offset)[m->itable_index()].
+ itableOffsetEntry::method_entry(_klass, method_table_offset)[m->itable_index()].
initialize(Universe::throw_illegal_access_error());
}
} else {
@@ -1215,7 +1215,7 @@
const char* loader1 = SystemDictionary::loader_name(method_holder_loader());
char* current = _klass->name()->as_C_string();
const char* loader2 = SystemDictionary::loader_name(interface_loader());
- char* iface = InstanceKlass::cast(interf_h())->name()->as_C_string();
+ char* iface = InstanceKlass::cast(interf)->name()->as_C_string();
char* failed_type_name = failed_type_symbol->as_C_string();
size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1) +
strlen(current) + strlen(loader2) + strlen(iface) +
@@ -1231,14 +1231,14 @@
// ime may have moved during GC so recalculate address
int ime_num = m->itable_index();
assert(ime_num < ime_count, "oob");
- itableOffsetEntry::method_entry(_klass(), method_table_offset)[ime_num].initialize(target());
+ itableOffsetEntry::method_entry(_klass, method_table_offset)[ime_num].initialize(target());
if (log_develop_is_enabled(Trace, itables)) {
ResourceMark rm(THREAD);
if (target() != NULL) {
outputStream* logst = Log(itables)::trace_stream();
char* sig = target()->name_and_sig_as_C_string();
logst->print("interface: %s, ime_num: %d, target: %s, method_holder: %s ",
- interf_h()->internal_name(), ime_num, sig,
+ interf->internal_name(), ime_num, sig,
target()->method_holder()->internal_name());
logst->print("target_method flags: ");
target()->print_linkage_flags(logst);
@@ -1408,7 +1408,7 @@
// Fill out offset table and interface klasses into the itable space
-void klassItable::setup_itable_offset_table(instanceKlassHandle klass) {
+void klassItable::setup_itable_offset_table(InstanceKlass* klass) {
if (klass->itable_length() == 0) return;
assert(!klass->is_interface(), "Should have zero length itable");
@@ -1433,7 +1433,7 @@
assert((oop*)(end) == (oop*)(ime + nof_methods), "wrong offset calculation (2)");
// Visit all interfaces and initialize itable offset table
- SetupItableClosure sic((address)klass(), ioe, ime);
+ SetupItableClosure sic((address)klass, ioe, ime);
visit_all_interfaces(klass->transitive_interfaces(), &sic);
#ifdef ASSERT
@@ -1476,7 +1476,7 @@
if (!forced && _verify_count == Universe::verify_count()) return;
_verify_count = Universe::verify_count();
#endif
- oop* end_of_obj = (oop*)_klass() + _klass()->size();
+ oop* end_of_obj = (oop*)_klass + _klass->size();
oop* end_of_vtable = (oop *)&table()[_length];
if (end_of_vtable > end_of_obj) {
fatal("klass %s: klass object too short (vtable extends beyond end)",
@@ -1516,8 +1516,7 @@
void vtableEntry::verify(klassVtable* vt, outputStream* st) {
NOT_PRODUCT(FlagSetting fs(IgnoreLockingAssertions, true));
- KlassHandle vtklass_h = vt->klass();
- Klass* vtklass = vtklass_h();
+ Klass* vtklass = vt->klass();
if (vtklass->is_instance_klass() &&
(InstanceKlass::cast(vtklass)->major_version() >= klassVtable::VTABLE_TRANSITIVE_OVERRIDE_VERSION)) {
assert(method() != NULL, "must have set method");
@@ -1525,7 +1524,7 @@
if (method() != NULL) {
method()->verify();
// we sub_type, because it could be a miranda method
- if (!vtklass_h->is_subtype_of(method()->method_holder())) {
+ if (!vtklass->is_subtype_of(method()->method_holder())) {
#ifndef PRODUCT
print();
#endif
--- a/hotspot/src/share/vm/oops/klassVtable.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/klassVtable.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -42,7 +42,7 @@
class vtableEntry;
class klassVtable : public ResourceObj {
- KlassHandle _klass; // my klass
+ Klass* _klass; // my klass
int _tableOffset; // offset of start of vtable data within klass
int _length; // length of vtable (number of entries)
#ifndef PRODUCT
@@ -57,13 +57,13 @@
};
public:
- klassVtable(KlassHandle h_klass, void* base, int length) : _klass(h_klass) {
- _tableOffset = (address)base - (address)h_klass(); _length = length;
+ klassVtable(Klass* klass, void* base, int length) : _klass(klass) {
+ _tableOffset = (address)base - (address)klass; _length = length;
}
// accessors
- vtableEntry* table() const { return (vtableEntry*)(address(_klass()) + _tableOffset); }
- KlassHandle klass() const { return _klass; }
+ vtableEntry* table() const { return (vtableEntry*)(address(_klass) + _tableOffset); }
+ Klass* klass() const { return _klass; }
int length() const { return _length; }
inline Method* method_at(int i) const;
inline Method* unchecked_method_at(int i) const;
@@ -125,7 +125,7 @@
private:
void copy_vtable_to(vtableEntry* start);
- int initialize_from_super(KlassHandle super);
+ int initialize_from_super(Klass* super);
int index_of(Method* m, int len) const; // same as index_of, but search only up to len
void put_method_at(Method* m, int index);
static bool needs_new_vtable_entry(methodHandle m,
@@ -290,14 +290,14 @@
//
class klassItable : public ResourceObj {
private:
- instanceKlassHandle _klass; // my klass
+ InstanceKlass* _klass; // my klass
int _table_offset; // offset of start of itable data within klass (in words)
int _size_offset_table; // size of offset table (in itableOffset entries)
int _size_method_table; // size of methodtable (in itableMethodEntry entries)
- void initialize_itable_for_interface(int method_table_offset, KlassHandle interf_h, bool checkconstraints, TRAPS);
+ void initialize_itable_for_interface(int method_table_offset, Klass* interf_h, bool checkconstraints, TRAPS);
public:
- klassItable(instanceKlassHandle klass);
+ klassItable(InstanceKlass* klass);
itableOffsetEntry* offset_entry(int i) { assert(0 <= i && i <= _size_offset_table, "index out of bounds");
return &((itableOffsetEntry*)vtable_start())[i]; }
@@ -329,7 +329,7 @@
static int assign_itable_indices_for_interface(Klass* klass);
static int method_count_for_interface(Klass* klass);
static int compute_itable_size(Array<Klass*>* transitive_interfaces);
- static void setup_itable_offset_table(instanceKlassHandle klass);
+ static void setup_itable_offset_table(InstanceKlass* klass);
// Resolving of method to index
static Method* method_for_itable_index(Klass* klass, int itable_index);
@@ -337,7 +337,7 @@
// Debugging/Statistics
static void print_statistics() PRODUCT_RETURN;
private:
- intptr_t* vtable_start() const { return ((intptr_t*)_klass()) + _table_offset; }
+ intptr_t* vtable_start() const { return ((intptr_t*)_klass) + _table_offset; }
intptr_t* method_start() const { return vtable_start() + _size_offset_table * itableOffsetEntry::size(); }
// Helper methods
--- a/hotspot/src/share/vm/oops/method.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/method.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -173,7 +173,7 @@
return buf;
}
-int Method::fast_exception_handler_bci_for(methodHandle mh, KlassHandle ex_klass, int throw_bci, TRAPS) {
+int Method::fast_exception_handler_bci_for(methodHandle mh, Klass* ex_klass, int throw_bci, TRAPS) {
// exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index)
// access exception table
ExceptionTable table(mh());
@@ -192,16 +192,15 @@
int klass_index = table.catch_type_index(i);
if (klass_index == 0) {
return handler_bci;
- } else if (ex_klass.is_null()) {
+ } else if (ex_klass == NULL) {
return handler_bci;
} else {
// we know the exception class => get the constraint class
// this may require loading of the constraint class; if verification
// fails or some other exception occurs, return handler_bci
Klass* k = pool->klass_at(klass_index, CHECK_(handler_bci));
- KlassHandle klass = KlassHandle(THREAD, k);
- assert(klass.not_null(), "klass not loaded");
- if (ex_klass->is_subtype_of(klass())) {
+ assert(k != NULL, "klass not loaded");
+ if (ex_klass->is_subtype_of(k)) {
return handler_bci;
}
}
@@ -1271,7 +1270,7 @@
ResourceMark rm;
methodHandle empty;
- KlassHandle holder = SystemDictionary::MethodHandle_klass();
+ InstanceKlass* holder = SystemDictionary::MethodHandle_klass();
Symbol* name = MethodHandles::signature_polymorphic_intrinsic_name(iid);
assert(iid == MethodHandles::signature_polymorphic_name_id(name), "");
if (TraceMethodHandles) {
@@ -1289,7 +1288,7 @@
ConstantPool* cp_oop = ConstantPool::allocate(loader_data, cp_length, CHECK_(empty));
cp = constantPoolHandle(THREAD, cp_oop);
}
- cp->set_pool_holder(InstanceKlass::cast(holder()));
+ cp->set_pool_holder(holder);
cp->symbol_at_put(_imcp_invoke_name, name);
cp->symbol_at_put(_imcp_invoke_signature, signature);
cp->set_has_preresolution();
--- a/hotspot/src/share/vm/oops/method.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/method.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -323,7 +323,7 @@
// exception handler which caused the exception to be thrown, which
// is needed for proper retries. See, for example,
// InterpreterRuntime::exception_handler_for_exception.
- static int fast_exception_handler_bci_for(methodHandle mh, KlassHandle ex_klass, int throw_bci, TRAPS);
+ static int fast_exception_handler_bci_for(methodHandle mh, Klass* ex_klass, int throw_bci, TRAPS);
// method data access
MethodData* method_data() const {
@@ -811,8 +811,7 @@
static void print_jmethod_ids(ClassLoaderData* loader_data, outputStream* out) PRODUCT_RETURN;
// Get this method's jmethodID -- allocate if it doesn't exist
- jmethodID jmethod_id() { methodHandle this_h(this);
- return InstanceKlass::get_jmethod_id(method_holder(), this_h); }
+ jmethodID jmethod_id() { return InstanceKlass::get_jmethod_id(method_holder(), this); }
// Lookup the jmethodID for this method. Return NULL if not found.
// NOTE that this function can be called from a signal handler
--- a/hotspot/src/share/vm/oops/objArrayKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -46,26 +46,26 @@
#include "utilities/copy.hpp"
#include "utilities/macros.hpp"
-ObjArrayKlass* ObjArrayKlass::allocate(ClassLoaderData* loader_data, int n, KlassHandle klass_handle, Symbol* name, TRAPS) {
+ObjArrayKlass* ObjArrayKlass::allocate(ClassLoaderData* loader_data, int n, Klass* k, Symbol* name, TRAPS) {
assert(ObjArrayKlass::header_size() <= InstanceKlass::header_size(),
"array klasses must be same size as InstanceKlass");
int size = ArrayKlass::static_size(ObjArrayKlass::header_size());
- return new (loader_data, size, THREAD) ObjArrayKlass(n, klass_handle, name);
+ return new (loader_data, size, THREAD) ObjArrayKlass(n, k, name);
}
Klass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
- int n, KlassHandle element_klass, TRAPS) {
+ int n, Klass* element_klass, TRAPS) {
// Eagerly allocate the direct array supertype.
- KlassHandle super_klass = KlassHandle();
+ Klass* super_klass = NULL;
if (!Universe::is_bootstrapping() || SystemDictionary::Object_klass_loaded()) {
- KlassHandle element_super (THREAD, element_klass->super());
- if (element_super.not_null()) {
+ Klass* element_super = element_klass->super();
+ if (element_super != NULL) {
// The element type has a direct super. E.g., String[] has direct super of Object[].
- super_klass = KlassHandle(THREAD, element_super->array_klass_or_null());
- bool supers_exist = super_klass.not_null();
+ super_klass = element_super->array_klass_or_null();
+ bool supers_exist = super_klass != NULL;
// Also, see if the element has secondary supertypes.
// We need an array type for each.
Array<Klass*>* element_supers = element_klass->secondary_supers();
@@ -78,34 +78,30 @@
}
if (!supers_exist) {
// Oops. Not allocated yet. Back out, allocate it, and retry.
- KlassHandle ek;
+ Klass* ek = NULL;
{
MutexUnlocker mu(MultiArray_lock);
MutexUnlocker mc(Compile_lock); // for vtables
- Klass* sk = element_super->array_klass(CHECK_0);
- super_klass = KlassHandle(THREAD, sk);
+ super_klass = element_super->array_klass(CHECK_0);
for( int i = element_supers->length()-1; i >= 0; i-- ) {
- KlassHandle elem_super (THREAD, element_supers->at(i));
+ Klass* elem_super = element_supers->at(i);
elem_super->array_klass(CHECK_0);
}
// Now retry from the beginning
- Klass* klass_oop = element_klass->array_klass(n, CHECK_0);
- // Create a handle because the enclosing brace, when locking
- // can cause a gc. Better to have this function return a Handle.
- ek = KlassHandle(THREAD, klass_oop);
+ ek = element_klass->array_klass(n, CHECK_0);
} // re-lock
- return ek();
+ return ek;
}
} else {
// The element type is already Object. Object[] has direct super of Object.
- super_klass = KlassHandle(THREAD, SystemDictionary::Object_klass());
+ super_klass = SystemDictionary::Object_klass();
}
}
// Create type name for klass.
Symbol* name = NULL;
if (!element_klass->is_instance_klass() ||
- (name = InstanceKlass::cast(element_klass())->array_name()) == NULL) {
+ (name = InstanceKlass::cast(element_klass)->array_name()) == NULL) {
ResourceMark rm(THREAD);
char *name_str = element_klass->name()->as_C_string();
@@ -124,7 +120,7 @@
new_str[idx++] = '\0';
name = SymbolTable::new_permanent_symbol(new_str, CHECK_0);
if (element_klass->is_instance_klass()) {
- InstanceKlass* ik = InstanceKlass::cast(element_klass());
+ InstanceKlass* ik = InstanceKlass::cast(element_klass);
ik->set_array_name(name);
}
}
@@ -146,9 +142,9 @@
return oak;
}
-ObjArrayKlass::ObjArrayKlass(int n, KlassHandle element_klass, Symbol* name) : ArrayKlass(name) {
+ObjArrayKlass::ObjArrayKlass(int n, Klass* element_klass, Symbol* name) : ArrayKlass(name) {
this->set_dimension(n);
- this->set_element_klass(element_klass());
+ this->set_element_klass(element_klass);
// decrement refcount because object arrays are not explicitly freed. The
// InstanceKlass array_name() keeps the name counted while the klass is
// loaded.
@@ -156,9 +152,9 @@
Klass* bk;
if (element_klass->is_objArray_klass()) {
- bk = ObjArrayKlass::cast(element_klass())->bottom_klass();
+ bk = ObjArrayKlass::cast(element_klass)->bottom_klass();
} else {
- bk = element_klass();
+ bk = element_klass;
}
assert(bk != NULL && (bk->is_instance_klass() || bk->is_typeArray_klass()), "invalid bottom klass");
this->set_bottom_klass(bk);
@@ -178,8 +174,7 @@
if (length >= 0) {
if (length <= arrayOopDesc::max_array_length(T_OBJECT)) {
int size = objArrayOopDesc::object_size(length);
- KlassHandle h_k(THREAD, this);
- return (objArrayOop)CollectedHeap::array_allocate(h_k, size, length, THREAD);
+ return (objArrayOop)CollectedHeap::array_allocate(this, size, length, THREAD);
} else {
report_java_out_of_memory("Requested array size exceeds VM limit");
JvmtiExport::post_array_size_exhausted();
@@ -196,14 +191,14 @@
int length = *sizes;
// Call to lower_dimension uses this pointer, so most be called before a
// possible GC
- KlassHandle h_lower_dimension(THREAD, lower_dimension());
+ Klass* ld_klass = lower_dimension();
// If length < 0 allocate will throw an exception.
objArrayOop array = allocate(length, CHECK_NULL);
objArrayHandle h_array (THREAD, array);
if (rank > 1) {
if (length != 0) {
for (int index = 0; index < length; index++) {
- ArrayKlass* ak = ArrayKlass::cast(h_lower_dimension());
+ ArrayKlass* ak = ArrayKlass::cast(ld_klass);
oop sub_array = ak->multi_allocate(rank-1, &sizes[1], CHECK_NULL);
h_array->obj_at_put(index, sub_array);
}
--- a/hotspot/src/share/vm/oops/objArrayKlass.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/objArrayKlass.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -39,8 +39,8 @@
Klass* _bottom_klass; // The one-dimensional type (InstanceKlass or TypeArrayKlass)
// Constructor
- ObjArrayKlass(int n, KlassHandle element_klass, Symbol* name);
- static ObjArrayKlass* allocate(ClassLoaderData* loader_data, int n, KlassHandle klass_handle, Symbol* name, TRAPS);
+ ObjArrayKlass(int n, Klass* element_klass, Symbol* name);
+ static ObjArrayKlass* allocate(ClassLoaderData* loader_data, int n, Klass* k, Symbol* name, TRAPS);
public:
// For dummy objects
ObjArrayKlass() {}
@@ -69,7 +69,7 @@
// Allocation
static Klass* allocate_objArray_klass(ClassLoaderData* loader_data,
- int n, KlassHandle element_klass, TRAPS);
+ int n, Klass* element_klass, TRAPS);
objArrayOop allocate(int length, TRAPS);
oop multi_allocate(int rank, jint* sizes, TRAPS);
--- a/hotspot/src/share/vm/oops/typeArrayKlass.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/oops/typeArrayKlass.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -102,13 +102,12 @@
if (length >= 0) {
if (length <= max_length()) {
size_t size = typeArrayOopDesc::object_size(layout_helper(), length);
- KlassHandle h_k(THREAD, this);
typeArrayOop t;
CollectedHeap* ch = Universe::heap();
if (do_zero) {
- t = (typeArrayOop)CollectedHeap::array_allocate(h_k, (int)size, length, CHECK_NULL);
+ t = (typeArrayOop)CollectedHeap::array_allocate(this, (int)size, length, CHECK_NULL);
} else {
- t = (typeArrayOop)CollectedHeap::array_allocate_nozero(h_k, (int)size, length, CHECK_NULL);
+ t = (typeArrayOop)CollectedHeap::array_allocate_nozero(this, (int)size, length, CHECK_NULL);
}
return t;
} else {
--- a/hotspot/src/share/vm/prims/jni.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jni.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -386,8 +386,8 @@
Handle loader;
Handle protection_domain;
// Find calling class
- instanceKlassHandle k (THREAD, thread->security_get_caller_class(0));
- if (k.not_null()) {
+ Klass* k = thread->security_get_caller_class(0);
+ if (k != NULL) {
loader = Handle(THREAD, k->class_loader());
// Special handling to make sure JNI_OnLoad and JNI_OnUnload are executed
// in the correct class context.
@@ -395,9 +395,9 @@
k->name() == vmSymbols::java_lang_ClassLoader_NativeLibrary()) {
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result, k,
- vmSymbols::getFromClass_name(),
- vmSymbols::void_class_signature(),
- thread);
+ vmSymbols::getFromClass_name(),
+ vmSymbols::void_class_signature(),
+ thread);
if (HAS_PENDING_EXCEPTION) {
Handle ex(thread, thread->pending_exception());
CLEAR_PENDING_EXCEPTION;
@@ -455,12 +455,11 @@
mirror = java_lang_reflect_Method::clazz(reflected);
slot = java_lang_reflect_Method::slot(reflected);
}
- Klass* k = java_lang_Class::as_Klass(mirror);
-
- KlassHandle k1(THREAD, k);
+ Klass* k1 = java_lang_Class::as_Klass(mirror);
+
// Make sure class is initialized before handing id's out to methods
- k1()->initialize(CHECK_NULL);
- Method* m = InstanceKlass::cast(k1())->method_with_idnum(slot);
+ k1->initialize(CHECK_NULL);
+ Method* m = InstanceKlass::cast(k1)->method_with_idnum(slot);
ret = m==NULL? NULL : m->jmethod_id(); // return NULL if reflected method deleted
return ret;
JNI_END
@@ -479,18 +478,17 @@
// field is a handle to a java.lang.reflect.Field object
oop reflected = JNIHandles::resolve_non_null(field);
oop mirror = java_lang_reflect_Field::clazz(reflected);
- Klass* k = java_lang_Class::as_Klass(mirror);
+ Klass* k1 = java_lang_Class::as_Klass(mirror);
int slot = java_lang_reflect_Field::slot(reflected);
int modifiers = java_lang_reflect_Field::modifiers(reflected);
- KlassHandle k1(THREAD, k);
// Make sure class is initialized before handing id's out to fields
- k1()->initialize(CHECK_NULL);
+ k1->initialize(CHECK_NULL);
// First check if this is a static field
if (modifiers & JVM_ACC_STATIC) {
- intptr_t offset = InstanceKlass::cast(k1())->field_offset( slot );
- JNIid* id = InstanceKlass::cast(k1())->jni_id_for(offset);
+ intptr_t offset = InstanceKlass::cast(k1)->field_offset( slot );
+ JNIid* id = InstanceKlass::cast(k1)->jni_id_for(offset);
assert(id != NULL, "corrupt Field object");
debug_only(id->set_is_static_field_id();)
// A jfieldID for a static field is a JNIid specifying the field holder and the offset within the Klass*
@@ -501,9 +499,9 @@
// The slot is the index of the field description in the field-array
// The jfieldID is the offset of the field within the object
// It may also have hash bits for k, if VerifyJNIFields is turned on.
- intptr_t offset = InstanceKlass::cast(k1())->field_offset( slot );
- assert(InstanceKlass::cast(k1())->contains_field_offset(offset), "stay within object");
- ret = jfieldIDWorkaround::to_instance_jfieldID(k1(), offset);
+ intptr_t offset = InstanceKlass::cast(k1)->field_offset( slot );
+ assert(InstanceKlass::cast(k1)->contains_field_offset(offset), "stay within object");
+ ret = jfieldIDWorkaround::to_instance_jfieldID(k1, offset);
return ret;
JNI_END
@@ -677,8 +675,7 @@
JavaValue result(T_VOID);
JavaCalls::call_virtual(&result,
ex,
- KlassHandle(THREAD,
- SystemDictionary::Throwable_klass()),
+ SystemDictionary::Throwable_klass(),
vmSymbols::printStackTrace_name(),
vmSymbols::void_method_signature(),
THREAD);
@@ -1156,11 +1153,9 @@
}
} else {
// interface call
- KlassHandle h_holder(THREAD, holder);
-
int itbl_index = m->itable_index();
Klass* k = h_recv->klass();
- selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK);
+ selected_method = InstanceKlass::cast(k)->method_at_itable(holder, itbl_index, CHECK);
}
}
@@ -1192,14 +1187,14 @@
static instanceOop alloc_object(jclass clazz, TRAPS) {
- KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
if (k == NULL) {
ResourceMark rm(THREAD);
THROW_(vmSymbols::java_lang_InstantiationException(), NULL);
}
- k()->check_valid_for_instantiation(false, CHECK_NULL);
- InstanceKlass::cast(k())->initialize(CHECK_NULL);
- instanceOop ih = InstanceKlass::cast(k())->allocate_instance(THREAD);
+ k->check_valid_for_instantiation(false, CHECK_NULL);
+ k->initialize(CHECK_NULL);
+ instanceOop ih = InstanceKlass::cast(k)->allocate_instance(THREAD);
return ih;
}
@@ -1338,26 +1333,25 @@
THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), name_str);
}
- KlassHandle klass(THREAD,
- java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
+ Klass* klass = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
// Make sure class is linked and initialized before handing id's out to
// Method*s.
- klass()->initialize(CHECK_NULL);
+ klass->initialize(CHECK_NULL);
Method* m;
if (name == vmSymbols::object_initializer_name() ||
name == vmSymbols::class_initializer_name()) {
// Never search superclasses for constructors
if (klass->is_instance_klass()) {
- m = InstanceKlass::cast(klass())->find_method(name, signature);
+ m = InstanceKlass::cast(klass)->find_method(name, signature);
} else {
m = NULL;
}
} else {
m = klass->lookup_method(name, signature);
if (m == NULL && klass->is_instance_klass()) {
- m = InstanceKlass::cast(klass())->lookup_method_in_ordered_interfaces(name, signature);
+ m = InstanceKlass::cast(klass)->lookup_method_in_ordered_interfaces(name, signature);
}
}
if (m == NULL || (m->is_static() != is_static)) {
@@ -1879,8 +1873,8 @@
JavaValue jvalue(Tag); \
JNI_ArgumentPusherVaArg ap(methodID, args); \
/* Make sure class is initialized before trying to invoke its method */ \
- KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); \
- k()->initialize(CHECK_0); \
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); \
+ k->initialize(CHECK_0); \
jni_invoke_static(env, &jvalue, NULL, JNI_STATIC, methodID, &ap, CHECK_0); \
va_end(args); \
ret = jvalue.get_##ResultType(); \
@@ -2037,20 +2031,19 @@
if (fieldname == NULL || signame == NULL) {
THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
}
- KlassHandle k(THREAD,
- java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
// Make sure class is initialized before handing id's out to fields
- k()->initialize(CHECK_NULL);
+ k->initialize(CHECK_NULL);
fieldDescriptor fd;
- if (!k()->is_instance_klass() ||
- !InstanceKlass::cast(k())->find_field(fieldname, signame, false, &fd)) {
+ if (!k->is_instance_klass() ||
+ !InstanceKlass::cast(k)->find_field(fieldname, signame, false, &fd)) {
THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
}
// A jfieldID for a non-static field is simply the offset of the field within the instanceOop
// It may also have hash bits for k, if VerifyJNIFields is turned on.
- ret = jfieldIDWorkaround::to_instance_jfieldID(k(), fd.offset());
+ ret = jfieldIDWorkaround::to_instance_jfieldID(k, fd.offset());
return ret;
JNI_END
@@ -2292,14 +2285,13 @@
if (fieldname == NULL || signame == NULL) {
THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
}
- KlassHandle k(THREAD,
- java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
// Make sure class is initialized before handing id's out to static fields
- k()->initialize(CHECK_NULL);
+ k->initialize(CHECK_NULL);
fieldDescriptor fd;
- if (!k()->is_instance_klass() ||
- !InstanceKlass::cast(k())->find_field(fieldname, signame, true, &fd)) {
+ if (!k->is_instance_klass() ||
+ !InstanceKlass::cast(k)->find_field(fieldname, signame, true, &fd)) {
THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
}
@@ -2603,11 +2595,10 @@
HOTSPOT_JNI_NEWOBJECTARRAY_ENTRY(env, length, elementClass, initialElement);
jobjectArray ret = NULL;
DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret);
- KlassHandle ek(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass)));
- Klass* ako = ek()->array_klass(CHECK_NULL);
- KlassHandle ak = KlassHandle(THREAD, ako);
- ObjArrayKlass::cast(ak())->initialize(CHECK_NULL);
- objArrayOop result = ObjArrayKlass::cast(ak())->allocate(length, CHECK_NULL);
+ Klass* ek = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass));
+ Klass* ak = ek->array_klass(CHECK_NULL);
+ ObjArrayKlass::cast(ak)->initialize(CHECK_NULL);
+ objArrayOop result = ObjArrayKlass::cast(ak)->allocate(length, CHECK_NULL);
oop initial_value = JNIHandles::resolve(initialElement);
if (initial_value != NULL) { // array already initialized with NULL
for (int index = 0; index < length; index++) {
@@ -2936,8 +2927,7 @@
// is not native. Ask JVM TI what prefixes have been specified. Then check
// to see if the native method is now wrapped with the prefixes. See the
// SetNativeMethodPrefix(es) functions in the JVM TI Spec for details.
-static Method* find_prefixed_native(KlassHandle k,
- Symbol* name, Symbol* signature, TRAPS) {
+static Method* find_prefixed_native(Klass* k, Symbol* name, Symbol* signature, TRAPS) {
#if INCLUDE_JVMTI
ResourceMark rm(THREAD);
Method* method;
@@ -2958,7 +2948,7 @@
if (trial_name == NULL) {
continue; // no such symbol, so this prefix wasn't used, try the next prefix
}
- method = k()->lookup_method(trial_name, signature);
+ method = k->lookup_method(trial_name, signature);
if (method == NULL) {
continue; // signature doesn't match, try the next prefix
}
@@ -2974,13 +2964,13 @@
return NULL; // not found
}
-static bool register_native(KlassHandle k, Symbol* name, Symbol* signature, address entry, TRAPS) {
- Method* method = k()->lookup_method(name, signature);
+static bool register_native(Klass* k, Symbol* name, Symbol* signature, address entry, TRAPS) {
+ Method* method = k->lookup_method(name, signature);
if (method == NULL) {
ResourceMark rm;
stringStream st;
st.print("Method %s name or signature does not match",
- Method::name_and_sig_as_C_string(k(), name, signature));
+ Method::name_and_sig_as_C_string(k, name, signature));
THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), false);
}
if (!method->is_native()) {
@@ -2990,7 +2980,7 @@
ResourceMark rm;
stringStream st;
st.print("Method %s is not declared as native",
- Method::name_and_sig_as_C_string(k(), name, signature));
+ Method::name_and_sig_as_C_string(k, name, signature));
THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), false);
}
}
@@ -3021,7 +3011,7 @@
jint ret = 0;
DT_RETURN_MARK(RegisterNatives, jint, (const jint&)ret);
- KlassHandle h_k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
for (int index = 0; index < nMethods; index++) {
const char* meth_name = methods[index].name;
@@ -3037,12 +3027,12 @@
if (name == NULL || signature == NULL) {
ResourceMark rm;
stringStream st;
- st.print("Method %s.%s%s not found", h_k()->external_name(), meth_name, meth_sig);
+ st.print("Method %s.%s%s not found", k->external_name(), meth_name, meth_sig);
// Must return negative value on failure
THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), -1);
}
- bool res = register_native(h_k, name, signature,
+ bool res = register_native(k, name, signature,
(address) methods[index].fnPtr, THREAD);
if (!res) {
ret = -1;
--- a/hotspot/src/share/vm/prims/jvm.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvm.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -341,7 +341,7 @@
Handle value_str = java_lang_String::create_from_platform_dependent_str((value != NULL ? value : ""), CHECK);
JavaCalls::call_virtual(&r,
props,
- KlassHandle(THREAD, SystemDictionary::Properties_klass()),
+ SystemDictionary::Properties_klass(),
vmSymbols::put_name(),
vmSymbols::object_object_object_signature(),
key_str,
@@ -621,7 +621,7 @@
JVM_ENTRY(jobject, JVM_Clone(JNIEnv* env, jobject handle))
JVMWrapper("JVM_Clone");
Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
- const KlassHandle klass (THREAD, obj->klass());
+ Klass* klass = obj->klass();
JvmtiVMObjectAllocEventCollector oam;
#ifdef ASSERT
@@ -997,9 +997,7 @@
if (k == NULL) {
// If the class is not already loaded, try to see if it's in the shared
// archive for the current classloader (h_loader).
- instanceKlassHandle ik = SystemDictionaryShared::find_or_load_shared_class(
- klass_name, h_loader, CHECK_NULL);
- k = ik();
+ k = SystemDictionaryShared::find_or_load_shared_class(klass_name, h_loader, CHECK_NULL);
}
#endif
return (k == NULL) ? NULL :
@@ -1077,11 +1075,11 @@
return (jobjectArray) JNIHandles::make_local(env, r);
}
- KlassHandle klass(thread, java_lang_Class::as_Klass(mirror));
+ Klass* klass = java_lang_Class::as_Klass(mirror);
// Figure size of result array
int size;
if (klass->is_instance_klass()) {
- size = InstanceKlass::cast(klass())->local_interfaces()->length();
+ size = InstanceKlass::cast(klass)->local_interfaces()->length();
} else {
assert(klass->is_objArray_klass() || klass->is_typeArray_klass(), "Illegal mirror klass");
size = 2;
@@ -1094,7 +1092,7 @@
if (klass->is_instance_klass()) {
// Regular instance klass, fill in all local interfaces
for (int index = 0; index < size; index++) {
- Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index);
+ Klass* k = InstanceKlass::cast(klass)->local_interfaces()->at(index);
result->obj_at_put(index, k->java_mirror());
}
} else {
@@ -1178,7 +1176,7 @@
JVM_END
-static bool is_authorized(Handle context, instanceKlassHandle klass, TRAPS) {
+static bool is_authorized(Handle context, InstanceKlass* klass, TRAPS) {
// If there is a security manager and protection domain, check the access
// in the protection domain, otherwise it is authorized.
if (java_lang_System::has_security_manager()) {
@@ -1218,7 +1216,7 @@
Handle obj = pd_klass->allocate_instance_handle(CHECK_NULL);
// Call constructor ProtectionDomain(null, null);
JavaValue result(T_VOID);
- JavaCalls::call_special(&result, obj, KlassHandle(THREAD, pd_klass),
+ JavaCalls::call_special(&result, obj, pd_klass,
vmSymbols::object_initializer_name(),
vmSymbols::codesource_permissioncollection_signature(),
Handle(), Handle(), CHECK_NULL);
@@ -1249,7 +1247,7 @@
}
Method* method = vfst.method();
- instanceKlassHandle klass (THREAD, method->method_holder());
+ InstanceKlass* klass = method->method_holder();
// Check that action object understands "Object run()"
Handle h_context;
@@ -1452,7 +1450,7 @@
return (jobjectArray)JNIHandles::make_local(env, result);
}
- instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
+ InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
InnerClassesIterator iter(k);
if (iter.length() == 0) {
@@ -1479,9 +1477,9 @@
// before attempting to find the class.
if (cp->klass_name_at_matches(k, ooff)) {
Klass* outer_klass = cp->klass_at(ooff, CHECK_NULL);
- if (outer_klass == k()) {
+ if (outer_klass == k) {
Klass* ik = cp->klass_at(ioff, CHECK_NULL);
- instanceKlassHandle inner_klass (THREAD, ik);
+ InstanceKlass* inner_klass = InstanceKlass::cast(ik);
// Throws an exception if outer klass has not declared k as
// an inner klass
@@ -1532,7 +1530,7 @@
!java_lang_Class::as_Klass(mirror)->is_instance_klass()) {
return NULL;
}
- instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror)));
+ InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
int ooff = 0, noff = 0;
if (InstanceKlass::find_inner_classes_attr(k, &ooff, &noff, THREAD)) {
if (noff != 0) {
@@ -1590,19 +1588,19 @@
int slot = java_lang_reflect_Field::slot(reflected);
int modifiers = java_lang_reflect_Field::modifiers(reflected);
- KlassHandle kh(THREAD, k);
- intptr_t offset = InstanceKlass::cast(kh())->field_offset(slot);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ intptr_t offset = ik->field_offset(slot);
if (modifiers & JVM_ACC_STATIC) {
// for static fields we only look in the current class
- if (!InstanceKlass::cast(kh())->find_local_field_from_offset(offset, true, &fd)) {
+ if (!ik->find_local_field_from_offset(offset, true, &fd)) {
assert(false, "cannot find static field");
return false;
}
} else {
// for instance fields we start with the current class and work
// our way up through the superclass chain
- if (!InstanceKlass::cast(kh())->find_field_from_offset(offset, false, &fd)) {
+ if (!ik->find_field_from_offset(offset, false, &fd)) {
assert(false, "cannot find instance field");
return false;
}
@@ -1757,7 +1755,7 @@
return (jobjectArray) JNIHandles::make_local(env, res);
}
- instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
+ InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
constantPoolHandle cp(THREAD, k->constants());
// Ensure class is linked
@@ -1768,7 +1766,7 @@
if (publicOnly) {
num_fields = 0;
- for (JavaFieldStream fs(k()); !fs.done(); fs.next()) {
+ for (JavaFieldStream fs(k); !fs.done(); fs.next()) {
if (fs.access_flags().is_public()) ++num_fields;
}
} else {
@@ -1782,7 +1780,7 @@
fieldDescriptor fd;
for (JavaFieldStream fs(k); !fs.done(); fs.next()) {
if (!publicOnly || fs.access_flags().is_public()) {
- fd.reinitialize(k(), fs.index());
+ fd.reinitialize(k, fs.index());
oop field = Reflection::new_field(&fd, CHECK_NULL);
result->obj_at_put(out_idx, field);
++out_idx;
@@ -1817,7 +1815,7 @@
return (jobjectArray) JNIHandles::make_local(env, res);
}
- instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
+ InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
// Ensure class is linked
k->link_class(CHECK_NULL);
@@ -1913,7 +1911,7 @@
if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
if (k->is_instance_klass()) {
- instanceKlassHandle k_h(THREAD, k);
+ InstanceKlass* k_h = InstanceKlass::cast(k);
Handle jcp = reflect_ConstantPool::create(CHECK_NULL);
reflect_ConstantPool::set_cp(jcp(), k_h->constants());
return JNIHandles::make_local(jcp());
@@ -1975,7 +1973,7 @@
k_o = ConstantPool::klass_at_if_loaded(cp, klass_ref);
if (k_o == NULL) return NULL;
}
- instanceKlassHandle k(THREAD, k_o);
+ InstanceKlass* k = InstanceKlass::cast(k_o);
Symbol* name = cp->uncached_name_ref_at(index);
Symbol* sig = cp->uncached_signature_ref_at(index);
methodHandle m (THREAD, k->find_method(name, sig));
@@ -2026,7 +2024,7 @@
k_o = ConstantPool::klass_at_if_loaded(cp, klass_ref);
if (k_o == NULL) return NULL;
}
- instanceKlassHandle k(THREAD, k_o);
+ InstanceKlass* k = InstanceKlass::cast(k_o);
Symbol* name = cp->uncached_name_ref_at(index);
Symbol* sig = cp->uncached_signature_ref_at(index);
fieldDescriptor fd;
@@ -2616,7 +2614,8 @@
case JVM_CONSTANT_Fieldref: {
Symbol* name = cp->uncached_name_ref_at(cp_index);
Symbol* signature = cp->uncached_signature_ref_at(cp_index);
- for (JavaFieldStream fs(k_called); !fs.done(); fs.next()) {
+ InstanceKlass* ik = InstanceKlass::cast(k_called);
+ for (JavaFieldStream fs(ik); !fs.done(); fs.next()) {
if (fs.name() == name && fs.signature() == signature) {
return fs.access_flags().as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS;
}
@@ -2770,7 +2769,7 @@
JavaValue result(T_VOID);
JavaCalls::call_virtual(&result,
obj,
- KlassHandle(THREAD, SystemDictionary::Thread_klass()),
+ SystemDictionary::Thread_klass(),
vmSymbols::run_method_name(),
vmSymbols::void_method_signature(),
THREAD);
@@ -3226,7 +3225,7 @@
}
// Collect method holders
- GrowableArray<KlassHandle>* klass_array = new GrowableArray<KlassHandle>();
+ GrowableArray<Klass*>* klass_array = new GrowableArray<Klass*>();
for (; !vfst.at_end(); vfst.security_next()) {
Method* m = vfst.method();
// Native frames are not returned
@@ -3593,12 +3592,11 @@
// if there is no security manager in 3-arg Class.forName().
Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL);
- KlassHandle klass_handle(THREAD, klass);
// Check if we should initialize the class
- if (init && klass_handle->is_instance_klass()) {
- klass_handle->initialize(CHECK_NULL);
+ if (init && klass->is_instance_klass()) {
+ klass->initialize(CHECK_NULL);
}
- return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror());
+ return (jclass) JNIHandles::make_local(env, klass->java_mirror());
}
@@ -3746,25 +3744,25 @@
if (!k->is_instance_klass()) {
return NULL;
}
- instanceKlassHandle ik_h(THREAD, k);
- int encl_method_class_idx = ik_h->enclosing_method_class_index();
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ int encl_method_class_idx = ik->enclosing_method_class_index();
if (encl_method_class_idx == 0) {
return NULL;
}
objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL);
objArrayHandle dest(THREAD, dest_o);
- Klass* enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL);
+ Klass* enc_k = ik->constants()->klass_at(encl_method_class_idx, CHECK_NULL);
dest->obj_at_put(0, enc_k->java_mirror());
- int encl_method_method_idx = ik_h->enclosing_method_method_index();
+ int encl_method_method_idx = ik->enclosing_method_method_index();
if (encl_method_method_idx != 0) {
- Symbol* sym = ik_h->constants()->symbol_at(
+ Symbol* sym = ik->constants()->symbol_at(
extract_low_short_from_int(
- ik_h->constants()->name_and_type_at(encl_method_method_idx)));
+ ik->constants()->name_and_type_at(encl_method_method_idx)));
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
dest->obj_at_put(1, str());
- sym = ik_h->constants()->symbol_at(
+ sym = ik->constants()->symbol_at(
extract_high_short_from_int(
- ik_h->constants()->name_and_type_at(encl_method_method_idx)));
+ ik->constants()->name_and_type_at(encl_method_method_idx)));
str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
dest->obj_at_put(2, str());
}
@@ -3799,8 +3797,8 @@
int num_flags = Arguments::num_jvm_flags();
int num_args = Arguments::num_jvm_args();
- instanceKlassHandle ik (THREAD, SystemDictionary::String_klass());
- objArrayOop r = oopFactory::new_objArray(ik(), num_args + num_flags, CHECK_NULL);
+ InstanceKlass* ik = SystemDictionary::String_klass();
+ objArrayOop r = oopFactory::new_objArray(ik, num_args + num_flags, CHECK_NULL);
objArrayHandle result_h(THREAD, r);
int index = 0;
--- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -40,20 +40,20 @@
// JVMSpec| field_info fields[fields_count];
void JvmtiClassFileReconstituter::write_field_infos() {
HandleMark hm(thread());
- Array<AnnotationArray*>* fields_anno = ikh()->fields_annotations();
- Array<AnnotationArray*>* fields_type_anno = ikh()->fields_type_annotations();
+ Array<AnnotationArray*>* fields_anno = ik()->fields_annotations();
+ Array<AnnotationArray*>* fields_type_anno = ik()->fields_type_annotations();
// Compute the real number of Java fields
- int java_fields = ikh()->java_fields_count();
+ int java_fields = ik()->java_fields_count();
write_u2(java_fields);
- for (JavaFieldStream fs(ikh()); !fs.done(); fs.next()) {
+ for (JavaFieldStream fs(ik()); !fs.done(); fs.next()) {
AccessFlags access_flags = fs.access_flags();
int name_index = fs.name_index();
int signature_index = fs.signature_index();
int initial_value_index = fs.initval_index();
guarantee(name_index != 0 && signature_index != 0, "bad constant pool index for field");
- // int offset = ikh()->field_offset( index );
+ // int offset = ik()->field_offset( index );
int generic_signature_index = fs.generic_signature_index();
AnnotationArray* anno = fields_anno == NULL ? NULL : fields_anno->at(fs.index());
AnnotationArray* type_anno = fields_type_anno == NULL ? NULL : fields_type_anno->at(fs.index());
@@ -278,11 +278,11 @@
// JVMSpec| u2 sourcefile_index;
// JVMSpec| }
void JvmtiClassFileReconstituter::write_source_file_attribute() {
- assert(ikh()->source_file_name() != NULL, "caller must check");
+ assert(ik()->source_file_name() != NULL, "caller must check");
write_attribute_name_index("SourceFile");
write_u4(2); // always length 2
- write_u2(symbol_to_cpool_index(ikh()->source_file_name()));
+ write_u2(symbol_to_cpool_index(ik()->source_file_name()));
}
// Write SourceDebugExtension attribute
@@ -292,12 +292,12 @@
// JSR45| u1 debug_extension[attribute_length];
// JSR45| }
void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() {
- assert(ikh()->source_debug_extension() != NULL, "caller must check");
+ assert(ik()->source_debug_extension() != NULL, "caller must check");
write_attribute_name_index("SourceDebugExtension");
- int len = (int)strlen(ikh()->source_debug_extension());
+ int len = (int)strlen(ik()->source_debug_extension());
write_u4(len);
- u1* ext = (u1*)ikh()->source_debug_extension();
+ u1* ext = (u1*)ik()->source_debug_extension();
for (int i=0; i<len; i++) {
write_u1(ext[i]);
}
@@ -317,7 +317,7 @@
// Compute the number of entries in the InnerClasses attribute
u2 JvmtiClassFileReconstituter::inner_classes_attribute_length() {
- InnerClassesIterator iter(ikh());
+ InnerClassesIterator iter(ik());
return iter.length();
}
@@ -387,7 +387,7 @@
// JVMSpec| } classes[number_of_classes];
// JVMSpec| }
void JvmtiClassFileReconstituter::write_inner_classes_attribute(int length) {
- InnerClassesIterator iter(ikh());
+ InnerClassesIterator iter(ik());
guarantee(iter.length() != 0 && iter.length() == length,
"caller must check");
u2 entry_count = length / InstanceKlass::inner_class_next_offset;
@@ -618,18 +618,18 @@
// JVMSpec| attribute_info attributes[attributes_count];
void JvmtiClassFileReconstituter::write_class_attributes() {
u2 inner_classes_length = inner_classes_attribute_length();
- Symbol* generic_signature = ikh()->generic_signature();
- AnnotationArray* anno = ikh()->class_annotations();
- AnnotationArray* type_anno = ikh()->class_type_annotations();
+ Symbol* generic_signature = ik()->generic_signature();
+ AnnotationArray* anno = ik()->class_annotations();
+ AnnotationArray* type_anno = ik()->class_type_annotations();
int attr_count = 0;
if (generic_signature != NULL) {
++attr_count;
}
- if (ikh()->source_file_name() != NULL) {
+ if (ik()->source_file_name() != NULL) {
++attr_count;
}
- if (ikh()->source_debug_extension() != NULL) {
+ if (ik()->source_debug_extension() != NULL) {
++attr_count;
}
if (inner_classes_length > 0) {
@@ -650,10 +650,10 @@
if (generic_signature != NULL) {
write_signature_attribute(symbol_to_cpool_index(generic_signature));
}
- if (ikh()->source_file_name() != NULL) {
+ if (ik()->source_file_name() != NULL) {
write_source_file_attribute();
}
- if (ikh()->source_debug_extension() != NULL) {
+ if (ik()->source_debug_extension() != NULL) {
write_source_debug_extension_attribute();
}
if (inner_classes_length > 0) {
@@ -675,7 +675,7 @@
// JVMSpec| method_info methods[methods_count];
void JvmtiClassFileReconstituter::write_method_infos() {
HandleMark hm(thread());
- Array<Method*>* methods = ikh()->methods();
+ Array<Method*>* methods = ik()->methods();
int num_methods = methods->length();
int num_overpass = 0;
@@ -697,7 +697,7 @@
// invert the method order mapping
for (index = 0; index < num_methods; index++) {
- original_index = ikh()->method_ordering()->at(index);
+ original_index = ik()->method_ordering()->at(index);
assert(original_index >= 0 && original_index < num_methods,
"invalid original method index");
method_order.at_put(original_index, index);
@@ -727,8 +727,8 @@
// JVMSpec| u2 minor_version;
// JVMSpec| u2 major_version;
- write_u2(ikh()->minor_version());
- u2 major = ikh()->major_version();
+ write_u2(ik()->minor_version());
+ u2 major = ik()->major_version();
write_u2(major);
// JVMSpec| u2 constant_pool_count;
@@ -737,24 +737,24 @@
copy_cpool_bytes(writeable_address(cpool_size()));
// JVMSpec| u2 access_flags;
- write_u2(ikh()->access_flags().get_flags() & JVM_RECOGNIZED_CLASS_MODIFIERS);
+ write_u2(ik()->access_flags().get_flags() & JVM_RECOGNIZED_CLASS_MODIFIERS);
// JVMSpec| u2 this_class;
// JVMSpec| u2 super_class;
- write_u2(class_symbol_to_cpool_index(ikh()->name()));
- Klass* super_class = ikh()->super();
+ write_u2(class_symbol_to_cpool_index(ik()->name()));
+ Klass* super_class = ik()->super();
write_u2(super_class == NULL? 0 : // zero for java.lang.Object
class_symbol_to_cpool_index(super_class->name()));
// JVMSpec| u2 interfaces_count;
// JVMSpec| u2 interfaces[interfaces_count];
- Array<Klass*>* interfaces = ikh()->local_interfaces();
+ Array<Klass*>* interfaces = ik()->local_interfaces();
int num_interfaces = interfaces->length();
write_u2(num_interfaces);
for (int index = 0; index < num_interfaces; index++) {
HandleMark hm(thread());
- instanceKlassHandle iikh(thread(), interfaces->at(index));
- write_u2(class_symbol_to_cpool_index(iikh->name()));
+ InstanceKlass* iik = InstanceKlass::cast(interfaces->at(index));
+ write_u2(class_symbol_to_cpool_index(iik->name()));
}
// JVMSpec| u2 fields_count;
--- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -34,11 +34,11 @@
SymbolHashMap* _symmap;
SymbolHashMap* _classmap;
constantPoolHandle _cpool;
- instanceKlassHandle _ikh;
+ InstanceKlass* _ik;
jvmtiError _err;
protected:
- instanceKlassHandle ikh() { return _ikh; };
+ InstanceKlass* ik() { return _ik; };
constantPoolHandle cpool() { return _cpool; };
u2 symbol_to_cpool_index(Symbol* sym) {
@@ -52,10 +52,10 @@
public:
// Calls to this constructor must be proceeded by a ResourceMark
// and a HandleMark
- JvmtiConstantPoolReconstituter(instanceKlassHandle ikh){
+ JvmtiConstantPoolReconstituter(InstanceKlass* ik){
set_error(JVMTI_ERROR_NONE);
- _ikh = ikh;
- _cpool = constantPoolHandle(Thread::current(), ikh->constants());
+ _ik = ik;
+ _cpool = constantPoolHandle(Thread::current(), ik->constants());
_symmap = new SymbolHashMap();
_classmap = new SymbolHashMap();
_cpool_size = _cpool->hash_entries_to(_symmap, _classmap);
@@ -138,8 +138,8 @@
public:
// Calls to this constructor must be proceeded by a ResourceMark
// and a HandleMark
- JvmtiClassFileReconstituter(instanceKlassHandle ikh) :
- JvmtiConstantPoolReconstituter(ikh) {
+ JvmtiClassFileReconstituter(InstanceKlass* ik) :
+ JvmtiConstantPoolReconstituter(ik) {
_buffer_size = initial_buffer_size;
_buffer = _buffer_ptr = NEW_RESOURCE_ARRAY(u1, _buffer_size);
_thread = Thread::current();
--- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -400,21 +400,20 @@
return JVMTI_ERROR_UNMODIFIABLE_CLASS;
}
- Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
- KlassHandle klass(current_thread, k_oop);
+ Klass* klass = java_lang_Class::as_Klass(k_mirror);
jint status = klass->jvmti_class_status();
if (status & (JVMTI_CLASS_STATUS_ERROR)) {
return JVMTI_ERROR_INVALID_CLASS;
}
- instanceKlassHandle ikh(current_thread, k_oop);
- if (ikh->get_cached_class_file_bytes() == NULL) {
+ InstanceKlass* ik = InstanceKlass::cast(klass);
+ if (ik->get_cached_class_file_bytes() == NULL) {
// Not cached, we need to reconstitute the class file from the
// VM representation. We don't attach the reconstituted class
// bytes to the InstanceKlass here because they have not been
// validated and we're not at a safepoint.
- JvmtiClassFileReconstituter reconstituter(ikh);
+ JvmtiClassFileReconstituter reconstituter(ik);
if (reconstituter.get_error() != JVMTI_ERROR_NONE) {
return reconstituter.get_error();
}
@@ -424,8 +423,8 @@
reconstituter.class_file_bytes();
} else {
// it is cached, get it from the cache
- class_definitions[index].class_byte_count = ikh->get_cached_class_file_len();
- class_definitions[index].class_bytes = ikh->get_cached_class_file_bytes();
+ class_definitions[index].class_byte_count = ik->get_cached_class_file_len();
+ class_definitions[index].class_bytes = ik->get_cached_class_file_bytes();
}
class_definitions[index].klass = jcls;
}
@@ -667,8 +666,6 @@
return JVMTI_ERROR_INTERNAL;
}
- instanceKlassHandle loader_ik(THREAD, loader->klass());
-
// Invoke the appendToClassPathForInstrumentation method - if the method
// is not found it means the loader doesn't support adding to the class path
// in the live phase.
@@ -676,7 +673,7 @@
JavaValue res(T_VOID);
JavaCalls::call_special(&res,
loader,
- loader_ik,
+ loader->klass(),
vmSymbols::appendToClassPathForInstrumentation_name(),
vmSymbols::appendToClassPathForInstrumentation_signature(),
path,
@@ -1781,7 +1778,7 @@
jvmtiError
JvmtiEnv::FollowReferences(jint heap_filter, jclass klass, jobject initial_object, const jvmtiHeapCallbacks* callbacks, const void* user_data) {
// check klass if provided
- Klass* k_oop = NULL;
+ Klass* k = NULL;
if (klass != NULL) {
oop k_mirror = JNIHandles::resolve_external_guard(klass);
if (k_mirror == NULL) {
@@ -1790,18 +1787,17 @@
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_NONE;
}
- k_oop = java_lang_Class::as_Klass(k_mirror);
- if (k_oop == NULL) {
+ k = java_lang_Class::as_Klass(k_mirror);
+ if (klass == NULL) {
return JVMTI_ERROR_INVALID_CLASS;
}
}
Thread *thread = Thread::current();
HandleMark hm(thread);
- KlassHandle kh (thread, k_oop);
TraceTime t("FollowReferences", TRACETIME_LOG(Debug, jvmti, objecttagging));
- JvmtiTagMap::tag_map_for(this)->follow_references(heap_filter, kh, initial_object, callbacks, user_data);
+ JvmtiTagMap::tag_map_for(this)->follow_references(heap_filter, k, initial_object, callbacks, user_data);
return JVMTI_ERROR_NONE;
} /* end FollowReferences */
@@ -1812,7 +1808,7 @@
jvmtiError
JvmtiEnv::IterateThroughHeap(jint heap_filter, jclass klass, const jvmtiHeapCallbacks* callbacks, const void* user_data) {
// check klass if provided
- Klass* k_oop = NULL;
+ Klass* k = NULL;
if (klass != NULL) {
oop k_mirror = JNIHandles::resolve_external_guard(klass);
if (k_mirror == NULL) {
@@ -1821,18 +1817,14 @@
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_NONE;
}
- k_oop = java_lang_Class::as_Klass(k_mirror);
- if (k_oop == NULL) {
+ k = java_lang_Class::as_Klass(k_mirror);
+ if (k == NULL) {
return JVMTI_ERROR_INVALID_CLASS;
}
}
- Thread *thread = Thread::current();
- HandleMark hm(thread);
- KlassHandle kh (thread, k_oop);
-
TraceTime t("IterateThroughHeap", TRACETIME_LOG(Debug, jvmti, objecttagging));
- JvmtiTagMap::tag_map_for(this)->iterate_through_heap(heap_filter, kh, callbacks, user_data);
+ JvmtiTagMap::tag_map_for(this)->iterate_through_heap(heap_filter, k, callbacks, user_data);
return JVMTI_ERROR_NONE;
} /* end IterateThroughHeap */
@@ -1909,7 +1901,7 @@
TraceTime t("IterateOverHeap", TRACETIME_LOG(Debug, jvmti, objecttagging));
Thread *thread = Thread::current();
HandleMark hm(thread);
- JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, KlassHandle(), heap_object_callback, user_data);
+ JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, NULL, heap_object_callback, user_data);
return JVMTI_ERROR_NONE;
} /* end IterateOverHeap */
@@ -1923,13 +1915,10 @@
// DO PRIMITIVE CLASS PROCESSING
return JVMTI_ERROR_NONE;
}
- Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
- if (k_oop == NULL) {
+ Klass* klass = java_lang_Class::as_Klass(k_mirror);
+ if (klass == NULL) {
return JVMTI_ERROR_INVALID_CLASS;
}
- Thread *thread = Thread::current();
- HandleMark hm(thread);
- KlassHandle klass (thread, k_oop);
TraceTime t("IterateOverInstancesOfClass", TRACETIME_LOG(Debug, jvmti, objecttagging));
JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, klass, heap_object_callback, user_data);
return JVMTI_ERROR_NONE;
@@ -2408,9 +2397,9 @@
*methods_ptr = (jmethodID*) jvmtiMalloc(0 * sizeof(jmethodID));
return JVMTI_ERROR_NONE;
}
- instanceKlassHandle instanceK_h(current_thread, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// Allocate the result and fill it in
- int result_length = instanceK_h->methods()->length();
+ int result_length = ik->methods()->length();
jmethodID* result_list = (jmethodID*)jvmtiMalloc(result_length * sizeof(jmethodID));
int index;
bool jmethodids_found = true;
@@ -2419,8 +2408,8 @@
// Use the original method ordering indices stored in the class, so we can emit
// jmethodIDs in the order they appeared in the class file
for (index = 0; index < result_length; index++) {
- Method* m = instanceK_h->methods()->at(index);
- int original_index = instanceK_h->method_ordering()->at(index);
+ Method* m = ik->methods()->at(index);
+ int original_index = ik->method_ordering()->at(index);
assert(original_index >= 0 && original_index < result_length, "invalid original method index");
jmethodID id;
if (jmethodids_found) {
@@ -2429,7 +2418,7 @@
// If we find an uninitialized value, make sure there is
// enough space for all the uninitialized values we might
// find.
- instanceK_h->ensure_space_for_methodids(index);
+ ik->ensure_space_for_methodids(index);
jmethodids_found = false;
id = m->jmethod_id();
}
@@ -2441,7 +2430,7 @@
} else {
// otherwise just copy in any order
for (index = 0; index < result_length; index++) {
- Method* m = instanceK_h->methods()->at(index);
+ Method* m = ik->methods()->at(index);
jmethodID id;
if (jmethodids_found) {
id = m->find_jmethod_id_or_null();
@@ -2449,7 +2438,7 @@
// If we find an uninitialized value, make sure there is
// enough space for all the uninitialized values we might
// find.
- instanceK_h->ensure_space_for_methodids(index);
+ ik->ensure_space_for_methodids(index);
jmethodids_found = false;
id = m->jmethod_id();
}
@@ -2494,11 +2483,11 @@
}
- instanceKlassHandle instanceK_h(current_thread, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
int result_count = 0;
// First, count the fields.
- FilteredFieldStream flds(instanceK_h, true, true);
+ FilteredFieldStream flds(ik, true, true);
result_count = flds.field_count();
// Allocate the result and fill it in
@@ -2507,9 +2496,9 @@
// this is the reverse order of what FieldStream hands out.
int id_index = (result_count - 1);
- for (FilteredFieldStream src_st(instanceK_h, true, true); !src_st.eos(); src_st.next()) {
+ for (FilteredFieldStream src_st(ik, true, true); !src_st.eos(); src_st.next()) {
result_list[id_index--] = jfieldIDWorkaround::to_jfieldID(
- instanceK_h, src_st.offset(),
+ ik, src_st.offset(),
src_st.access_flags().is_static());
}
assert(id_index == -1, "just checking");
@@ -2574,10 +2563,7 @@
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
- Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
- Thread *thread = Thread::current();
- HandleMark hm(thread);
- KlassHandle klass(thread, k_oop);
+ Klass* klass = java_lang_Class::as_Klass(k_mirror);
jint status = klass->jvmti_class_status();
if (status & (JVMTI_CLASS_STATUS_ERROR)) {
@@ -2587,7 +2573,7 @@
return JVMTI_ERROR_ABSENT_INFORMATION;
}
- instanceKlassHandle ik(thread, k_oop);
+ InstanceKlass* ik = InstanceKlass::cast(klass);
*minor_version_ptr = ik->minor_version();
*major_version_ptr = ik->major_version();
@@ -2605,11 +2591,9 @@
return JVMTI_ERROR_ABSENT_INFORMATION;
}
- Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
+ Klass* klass = java_lang_Class::as_Klass(k_mirror);
Thread *thread = Thread::current();
- HandleMark hm(thread);
ResourceMark rm(thread);
- KlassHandle klass(thread, k_oop);
jint status = klass->jvmti_class_status();
if (status & (JVMTI_CLASS_STATUS_ERROR)) {
@@ -2619,8 +2603,8 @@
return JVMTI_ERROR_ABSENT_INFORMATION;
}
- instanceKlassHandle ikh(thread, k_oop);
- JvmtiConstantPoolReconstituter reconstituter(ikh);
+ InstanceKlass* ik = InstanceKlass::cast(klass);
+ JvmtiConstantPoolReconstituter reconstituter(ik);
if (reconstituter.get_error() != JVMTI_ERROR_NONE) {
return reconstituter.get_error();
}
@@ -2639,7 +2623,7 @@
return reconstituter.get_error();
}
- constantPoolHandle constants(thread, ikh->constants());
+ constantPoolHandle constants(thread, ik->constants());
*constant_pool_count_ptr = constants->length();
*constant_pool_byte_count_ptr = cpool_size;
*constant_pool_bytes_ptr = cpool_bytes;
--- a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1366,13 +1366,13 @@
if (tos == atos && jobj != NULL) { // NULL reference is allowed
Handle ob_h(current_thread, JNIHandles::resolve_external_guard(jobj));
NULL_CHECK(ob_h, JVMTI_ERROR_INVALID_OBJECT);
- KlassHandle ob_kh = KlassHandle(current_thread, ob_h()->klass());
- NULL_CHECK(ob_kh, JVMTI_ERROR_INVALID_OBJECT);
+ Klass* ob_k = ob_h()->klass();
+ NULL_CHECK(ob_k, JVMTI_ERROR_INVALID_OBJECT);
// Method return type signature.
char* ty_sign = 1 + strchr(signature->as_C_string(), ')');
- if (!VM_GetOrSetLocal::is_assignable(ty_sign, ob_kh(), current_thread)) {
+ if (!VM_GetOrSetLocal::is_assignable(ty_sign, ob_k, current_thread)) {
return JVMTI_ERROR_TYPE_MISMATCH;
}
*ret_ob_h = ob_h;
--- a/hotspot/src/share/vm/prims/jvmtiExport.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -267,14 +267,14 @@
public:
JvmtiClassFileLoadEventMark(JavaThread *thread, Symbol* name,
- Handle class_loader, Handle prot_domain, KlassHandle *class_being_redefined) : JvmtiThreadEventMark(thread) {
+ Handle class_loader, Handle prot_domain, Klass* class_being_redefined) : JvmtiThreadEventMark(thread) {
_class_name = name != NULL? name->as_utf8() : NULL;
_jloader = (jobject)to_jobject(class_loader());
_protection_domain = (jobject)to_jobject(prot_domain());
if (class_being_redefined == NULL) {
_class_being_redefined = NULL;
} else {
- _class_being_redefined = (jclass)to_jclass((*class_being_redefined)());
+ _class_being_redefined = (jclass)to_jclass(class_being_redefined);
}
};
const char *class_name() {
@@ -735,7 +735,7 @@
JvmtiEnv * _curr_env;
JvmtiCachedClassFileData ** _cached_class_file_ptr;
JvmtiThreadState * _state;
- KlassHandle * _h_class_being_redefined;
+ Klass* _class_being_redefined;
JvmtiClassLoadKind _load_kind;
bool _has_been_modified;
@@ -758,9 +758,9 @@
_state = _thread->jvmti_thread_state();
if (_state != NULL) {
- _h_class_being_redefined = _state->get_class_being_redefined();
+ _class_being_redefined = _state->get_class_being_redefined();
_load_kind = _state->get_class_load_kind();
- Klass* klass = (_h_class_being_redefined == NULL) ? NULL : (*_h_class_being_redefined)();
+ Klass* klass = (_class_being_redefined == NULL) ? NULL : _class_being_redefined;
if (_load_kind != jvmti_class_load_kind_load && klass != NULL) {
ModuleEntry* module_entry = InstanceKlass::cast(klass)->module();
assert(module_entry != NULL, "module_entry should always be set");
@@ -783,7 +783,7 @@
_state->clear_class_being_redefined();
} else {
// redefine and retransform will always set the thread state
- _h_class_being_redefined = (KlassHandle *) NULL;
+ _class_being_redefined = NULL;
_load_kind = jvmti_class_load_kind_load;
}
}
@@ -828,7 +828,7 @@
jint new_len = 0;
JvmtiClassFileLoadEventMark jem(_thread, _h_name, _class_loader,
_h_protection_domain,
- _h_class_being_redefined);
+ _class_being_redefined);
JvmtiJavaThreadEventTransition jet(_thread);
jvmtiEventClassFileLoadHook callback = env->callbacks()->ClassFileLoadHook;
if (callback != NULL) {
@@ -1155,7 +1155,6 @@
return;
}
HandleMark hm(thread);
- KlassHandle kh(thread, klass);
EVT_TRIG_TRACE(JVMTI_EVENT_CLASS_LOAD, ("[%s] Trg Class Load triggered",
JvmtiTrace::safe_get_thread_name(thread)));
@@ -1172,8 +1171,8 @@
}
EVT_TRACE(JVMTI_EVENT_CLASS_LOAD, ("[%s] Evt Class Load sent %s",
JvmtiTrace::safe_get_thread_name(thread),
- kh()==NULL? "NULL" : kh()->external_name() ));
- JvmtiClassEventMark jem(thread, kh());
+ klass==NULL? "NULL" : klass->external_name() ));
+ JvmtiClassEventMark jem(thread, klass);
JvmtiJavaThreadEventTransition jet(thread);
jvmtiEventClassLoad callback = env->callbacks()->ClassLoad;
if (callback != NULL) {
@@ -1189,7 +1188,6 @@
return;
}
HandleMark hm(thread);
- KlassHandle kh(thread, klass);
EVT_TRIG_TRACE(JVMTI_EVENT_CLASS_PREPARE, ("[%s] Trg Class Prepare triggered",
JvmtiTrace::safe_get_thread_name(thread)));
@@ -1206,8 +1204,8 @@
}
EVT_TRACE(JVMTI_EVENT_CLASS_PREPARE, ("[%s] Evt Class Prepare sent %s",
JvmtiTrace::safe_get_thread_name(thread),
- kh()==NULL? "NULL" : kh()->external_name() ));
- JvmtiClassEventMark jem(thread, kh());
+ klass==NULL? "NULL" : klass->external_name() ));
+ JvmtiClassEventMark jem(thread, klass);
JvmtiJavaThreadEventTransition jet(thread);
jvmtiEventClassPrepare callback = env->callbacks()->ClassPrepare;
if (callback != NULL) {
@@ -1223,7 +1221,6 @@
}
Thread *thread = Thread::current();
HandleMark hm(thread);
- KlassHandle kh(thread, klass);
EVT_TRIG_TRACE(EXT_EVENT_CLASS_UNLOAD, ("[?] Trg Class Unload triggered" ));
if (JvmtiEventController::is_enabled((jvmtiEvent)EXT_EVENT_CLASS_UNLOAD)) {
@@ -1244,12 +1241,12 @@
}
if (env->is_enabled((jvmtiEvent)EXT_EVENT_CLASS_UNLOAD)) {
EVT_TRACE(EXT_EVENT_CLASS_UNLOAD, ("[?] Evt Class Unload sent %s",
- kh()==NULL? "NULL" : kh()->external_name() ));
+ klass==NULL? "NULL" : klass->external_name() ));
// do everything manually, since this is a proxy - needs special care
JNIEnv* jni_env = real_thread->jni_environment();
jthread jt = (jthread)JNIHandles::make_local(real_thread, real_thread->threadObj());
- jclass jk = (jclass)JNIHandles::make_local(real_thread, kh()->java_mirror());
+ jclass jk = (jclass)JNIHandles::make_local(real_thread, klass->java_mirror());
// Before we call the JVMTI agent, we have to set the state in the
// thread for which we are proxying.
@@ -1595,7 +1592,7 @@
current_bci = st.bci();
do {
should_repeat = false;
- KlassHandle eh_klass(thread, exception_handle()->klass());
+ Klass* eh_klass = exception_handle()->klass();
current_bci = Method::fast_exception_handler_bci_for(
current_mh, eh_klass, current_bci, THREAD);
if (HAS_PENDING_EXCEPTION) {
@@ -1743,7 +1740,6 @@
if (!fd.is_field_access_watched()) return;
HandleMark hm(thread);
- KlassHandle h_klass(thread, klass);
Handle h_obj;
if (!is_static) {
// non-static field accessors have an object, but we need a handle
@@ -1753,11 +1749,11 @@
post_field_access(thread,
thread->last_frame().interpreter_frame_method(),
thread->last_frame().interpreter_frame_bcp(),
- h_klass, h_obj, fieldID);
+ klass, h_obj, fieldID);
}
void JvmtiExport::post_field_access(JavaThread *thread, Method* method,
- address location, KlassHandle field_klass, Handle object, jfieldID field) {
+ address location, Klass* field_klass, Handle object, jfieldID field) {
HandleMark hm(thread);
methodHandle mh(thread, method);
@@ -1779,7 +1775,7 @@
JvmtiEnv *env = ets->get_env();
JvmtiLocationEventMark jem(thread, mh, location);
- jclass field_jclass = jem.to_jclass(field_klass());
+ jclass field_jclass = jem.to_jclass(field_klass);
jobject field_jobject = jem.to_jobject(object());
JvmtiJavaThreadEventTransition jet(thread);
jvmtiEventFieldAccess callback = env->callbacks()->FieldAccess;
@@ -1847,22 +1843,21 @@
assert(obj != NULL, "non-static needs an object");
h_obj = Handle(thread, obj);
}
- KlassHandle h_klass(thread, klass);
post_field_modification(thread,
thread->last_frame().interpreter_frame_method(),
thread->last_frame().interpreter_frame_bcp(),
- h_klass, h_obj, fieldID, sig_type, value);
+ klass, h_obj, fieldID, sig_type, value);
}
void JvmtiExport::post_raw_field_modification(JavaThread *thread, Method* method,
- address location, KlassHandle field_klass, Handle object, jfieldID field,
+ address location, Klass* field_klass, Handle object, jfieldID field,
char sig_type, jvalue *value) {
if (sig_type == 'I' || sig_type == 'Z' || sig_type == 'B' || sig_type == 'C' || sig_type == 'S') {
// 'I' instructions are used for byte, char, short and int.
// determine which it really is, and convert
fieldDescriptor fd;
- bool found = JvmtiEnv::get_field_descriptor(field_klass(), field, &fd);
+ bool found = JvmtiEnv::get_field_descriptor(field_klass, field, &fd);
// should be found (if not, leave as is)
if (found) {
jint ival = value->i;
@@ -1917,7 +1912,7 @@
}
void JvmtiExport::post_field_modification(JavaThread *thread, Method* method,
- address location, KlassHandle field_klass, Handle object, jfieldID field,
+ address location, Klass* field_klass, Handle object, jfieldID field,
char sig_type, jvalue *value_ptr) {
HandleMark hm(thread);
@@ -1943,7 +1938,7 @@
JvmtiEnv *env = ets->get_env();
JvmtiLocationEventMark jem(thread, mh, location);
- jclass field_jclass = jem.to_jclass(field_klass());
+ jclass field_jclass = jem.to_jclass(field_klass);
jobject field_jobject = jem.to_jobject(object());
JvmtiJavaThreadEventTransition jet(thread);
jvmtiEventFieldModification callback = env->callbacks()->FieldModification;
--- a/hotspot/src/share/vm/prims/jvmtiExport.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2017, 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
@@ -150,7 +150,7 @@
};
static void post_field_modification(JavaThread *thread, Method* method, address location,
- KlassHandle field_klass, Handle object, jfieldID field,
+ Klass* field_klass, Handle object, jfieldID field,
char sig_type, jvalue *value);
@@ -310,7 +310,7 @@
static void post_field_access_by_jni (JavaThread *thread, oop obj,
Klass* klass, jfieldID fieldID, bool is_static) NOT_JVMTI_RETURN;
static void post_field_access (JavaThread *thread, Method* method,
- address location, KlassHandle field_klass, Handle object, jfieldID field) NOT_JVMTI_RETURN;
+ address location, Klass* field_klass, Handle object, jfieldID field) NOT_JVMTI_RETURN;
static oop jni_SetField_probe (JavaThread *thread, jobject jobj,
oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type,
jvalue *value) NOT_JVMTI_RETURN_(NULL);
@@ -321,7 +321,7 @@
Klass* klass, jfieldID fieldID, bool is_static, char sig_type,
jvalue *value);
static void post_raw_field_modification(JavaThread *thread, Method* method,
- address location, KlassHandle field_klass, Handle object, jfieldID field,
+ address location, Klass* field_klass, Handle object, jfieldID field,
char sig_type, jvalue *value) NOT_JVMTI_RETURN;
static void post_method_entry (JavaThread *thread, Method* method, frame current_frame) NOT_JVMTI_RETURN;
--- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -287,12 +287,12 @@
// add/remove breakpoint to/from versions of the method that are EMCP.
Thread *thread = Thread::current();
- instanceKlassHandle ikh = instanceKlassHandle(thread, _method->method_holder());
+ InstanceKlass* ik = _method->method_holder();
Symbol* m_name = _method->name();
Symbol* m_signature = _method->signature();
// search previous versions if they exist
- for (InstanceKlass* pv_node = ikh->previous_versions();
+ for (InstanceKlass* pv_node = ik->previous_versions();
pv_node != NULL;
pv_node = pv_node->previous_versions()) {
Array<Method*>* methods = pv_node->methods();
@@ -696,10 +696,10 @@
Handle obj(cur_thread, JNIHandles::resolve_external_guard(jobj));
NULL_CHECK(obj, (_result = JVMTI_ERROR_INVALID_OBJECT, false));
- KlassHandle ob_kh = KlassHandle(cur_thread, obj->klass());
- NULL_CHECK(ob_kh, (_result = JVMTI_ERROR_INVALID_OBJECT, false));
+ Klass* ob_k = obj->klass();
+ NULL_CHECK(ob_k, (_result = JVMTI_ERROR_INVALID_OBJECT, false));
- if (!is_assignable(signature, ob_kh(), cur_thread)) {
+ if (!is_assignable(signature, ob_k, cur_thread)) {
_result = JVMTI_ERROR_TYPE_MISMATCH;
return false;
}
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -58,7 +58,7 @@
int VM_RedefineClasses::_matching_methods_length = 0;
int VM_RedefineClasses::_deleted_methods_length = 0;
int VM_RedefineClasses::_added_methods_length = 0;
-Klass* VM_RedefineClasses::_the_class_oop = NULL;
+Klass* VM_RedefineClasses::_the_class = NULL;
VM_RedefineClasses::VM_RedefineClasses(jint class_count,
@@ -227,8 +227,8 @@
// Free os::malloc allocated memory.
os::free(_scratch_classes);
- // Reset the_class_oop to null for error printing.
- _the_class_oop = NULL;
+ // Reset the_class to null for error printing.
+ _the_class = NULL;
if (log_is_enabled(Info, redefine, class, timer)) {
// Used to have separate timers for "doit" and "all", but the timer
@@ -657,8 +657,8 @@
jvmtiError VM_RedefineClasses::compare_and_normalize_class_versions(
- instanceKlassHandle the_class,
- instanceKlassHandle scratch_class) {
+ InstanceKlass* the_class,
+ InstanceKlass* scratch_class) {
int i;
// Check superclasses, or rather their names, since superclasses themselves can be
@@ -993,8 +993,8 @@
jvmtiError VM_RedefineClasses::load_new_class_versions(TRAPS) {
// For consistency allocate memory using os::malloc wrapper.
- _scratch_classes = (Klass**)
- os::malloc(sizeof(Klass*) * _class_count, mtClass);
+ _scratch_classes = (InstanceKlass**)
+ os::malloc(sizeof(InstanceKlass*) * _class_count, mtClass);
if (_scratch_classes == NULL) {
return JVMTI_ERROR_OUT_OF_MEMORY;
}
@@ -1014,7 +1014,7 @@
// versions are deleted. Constant pools are deallocated while merging
// constant pools
HandleMark hm(THREAD);
- instanceKlassHandle the_class(THREAD, get_ik(_class_defs[i].klass));
+ InstanceKlass* the_class = get_ik(_class_defs[i].klass);
Symbol* the_class_sym = the_class->name();
log_debug(redefine, class, load)
@@ -1032,24 +1032,23 @@
// Set redefined class handle in JvmtiThreadState class.
// This redefined class is sent to agent event handler for class file
// load hook event.
- state->set_class_being_redefined(&the_class, _class_load_kind);
-
- Klass* k = SystemDictionary::parse_stream(the_class_sym,
- the_class_loader,
- protection_domain,
- &st,
- THREAD);
+ state->set_class_being_redefined(the_class, _class_load_kind);
+
+ InstanceKlass* scratch_class = SystemDictionary::parse_stream(
+ the_class_sym,
+ the_class_loader,
+ protection_domain,
+ &st,
+ THREAD);
// Clear class_being_redefined just to be sure.
state->clear_class_being_redefined();
// TODO: if this is retransform, and nothing changed we can skip it
- instanceKlassHandle scratch_class (THREAD, k);
-
// Need to clean up allocated InstanceKlass if there's an error so assign
// the result here. Caller deallocates all the scratch classes in case of
// an error.
- _scratch_classes[i] = k;
+ _scratch_classes[i] = scratch_class;
if (HAS_PENDING_EXCEPTION) {
Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
@@ -1106,7 +1105,7 @@
// the_class to scratch_class in the JVM_* functions called by the
// verifier. Please, refer to jvmtiThreadState.hpp for the detailed
// description.
- RedefineVerifyMark rvm(&the_class, &scratch_class, state);
+ RedefineVerifyMark rvm(the_class, scratch_class, state);
Verifier::verify(
scratch_class, Verifier::ThrowException, true, THREAD);
}
@@ -1138,7 +1137,7 @@
if (VerifyMergedCPBytecodes) {
// verify what we have done during constant pool merging
{
- RedefineVerifyMark rvm(&the_class, &scratch_class, state);
+ RedefineVerifyMark rvm(the_class, scratch_class, state);
Verifier::verify(scratch_class, Verifier::ThrowException, true, THREAD);
}
@@ -1434,7 +1433,7 @@
// potentially rewrite bytecodes in scratch_class to use the merged
// constant pool.
jvmtiError VM_RedefineClasses::merge_cp_and_rewrite(
- instanceKlassHandle the_class, instanceKlassHandle scratch_class,
+ InstanceKlass* the_class, InstanceKlass* scratch_class,
TRAPS) {
// worst case merged constant pool length is old and new combined
int merge_cp_length = the_class->constants()->length()
@@ -1483,7 +1482,7 @@
_operands_index_map_p = new intArray(operands_index_map_len, operands_index_map_len, -1);
// reference to the cp holder is needed for copy_operands()
- merge_cp->set_pool_holder(scratch_class());
+ merge_cp->set_pool_holder(scratch_class);
bool result = merge_constant_pools(old_cp, scratch_cp, &merge_cp,
&merge_cp_length, THREAD);
merge_cp->set_pool_holder(NULL);
@@ -1568,7 +1567,7 @@
// Rewrite constant pool references in klass scratch_class.
-bool VM_RedefineClasses::rewrite_cp_refs(instanceKlassHandle scratch_class,
+bool VM_RedefineClasses::rewrite_cp_refs(InstanceKlass* scratch_class,
TRAPS) {
// rewrite constant pool references in the methods:
@@ -1655,7 +1654,7 @@
// Rewrite constant pool references in the methods.
bool VM_RedefineClasses::rewrite_cp_refs_in_methods(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
Array<Method*>* methods = scratch_class->methods();
@@ -1834,7 +1833,7 @@
// Rewrite constant pool references in the class_annotations field.
bool VM_RedefineClasses::rewrite_cp_refs_in_class_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
AnnotationArray* class_annotations = scratch_class->class_annotations();
if (class_annotations == NULL || class_annotations->length() == 0) {
@@ -2124,7 +2123,7 @@
// Rewrite constant pool references in a fields_annotations field.
bool VM_RedefineClasses::rewrite_cp_refs_in_fields_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
Array<AnnotationArray*>* fields_annotations = scratch_class->fields_annotations();
@@ -2157,7 +2156,7 @@
// Rewrite constant pool references in a methods_annotations field.
bool VM_RedefineClasses::rewrite_cp_refs_in_methods_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
for (int i = 0; i < scratch_class->methods()->length(); i++) {
Method* m = scratch_class->methods()->at(i);
@@ -2195,7 +2194,7 @@
// }
//
bool VM_RedefineClasses::rewrite_cp_refs_in_methods_parameter_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
for (int i = 0; i < scratch_class->methods()->length(); i++) {
Method* m = scratch_class->methods()->at(i);
@@ -2244,7 +2243,7 @@
// }
//
bool VM_RedefineClasses::rewrite_cp_refs_in_methods_default_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
for (int i = 0; i < scratch_class->methods()->length(); i++) {
Method* m = scratch_class->methods()->at(i);
@@ -2271,7 +2270,7 @@
// Rewrite constant pool references in a class_type_annotations field.
bool VM_RedefineClasses::rewrite_cp_refs_in_class_type_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
AnnotationArray* class_type_annotations = scratch_class->class_type_annotations();
if (class_type_annotations == NULL || class_type_annotations->length() == 0) {
@@ -2289,7 +2288,7 @@
// Rewrite constant pool references in a fields_type_annotations field.
bool VM_RedefineClasses::rewrite_cp_refs_in_fields_type_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
Array<AnnotationArray*>* fields_type_annotations = scratch_class->fields_type_annotations();
if (fields_type_annotations == NULL || fields_type_annotations->length() == 0) {
@@ -2321,7 +2320,7 @@
// Rewrite constant pool references in a methods_type_annotations field.
bool VM_RedefineClasses::rewrite_cp_refs_in_methods_type_annotations(
- instanceKlassHandle scratch_class, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
for (int i = 0; i < scratch_class->methods()->length(); i++) {
Method* m = scratch_class->methods()->at(i);
@@ -3074,7 +3073,7 @@
// smaller constant pool is associated with scratch_class.
void VM_RedefineClasses::set_new_constant_pool(
ClassLoaderData* loader_data,
- instanceKlassHandle scratch_class, constantPoolHandle scratch_cp,
+ InstanceKlass* scratch_class, constantPoolHandle scratch_cp,
int scratch_cp_length, TRAPS) {
assert(scratch_cp->length() >= scratch_cp_length, "sanity check");
@@ -3091,7 +3090,7 @@
// attach klass to new constant pool
// reference to the cp holder is needed for copy_operands()
- smaller_cp->set_pool_holder(scratch_class());
+ smaller_cp->set_pool_holder(scratch_class);
scratch_cp->copy_cp_to(1, scratch_cp_length - 1, smaller_cp, 1, THREAD);
if (HAS_PENDING_EXCEPTION) {
@@ -3268,11 +3267,11 @@
// This is a very busy routine. We don't want too much tracing
// printed out.
bool trace_name_printed = false;
- InstanceKlass *the_class = InstanceKlass::cast(_the_class_oop);
+ InstanceKlass *the_class = InstanceKlass::cast(_the_class);
// If the class being redefined is java.lang.Object, we need to fix all
// array class vtables also
- if (k->is_array_klass() && _the_class_oop == SystemDictionary::Object_klass()) {
+ if (k->is_array_klass() && _the_class == SystemDictionary::Object_klass()) {
k->vtable()->adjust_method_entries(the_class, &trace_name_printed);
} else if (k->is_instance_klass()) {
@@ -3291,8 +3290,7 @@
// If the current class being redefined has a user-defined class
// loader as its defining class loader, then we can skip all
// classes loaded by the bootstrap class loader.
- bool is_user_defined =
- InstanceKlass::cast(_the_class_oop)->class_loader() != NULL;
+ bool is_user_defined = (_the_class->class_loader() != NULL);
if (is_user_defined && ik->class_loader() == NULL) {
return;
}
@@ -3311,9 +3309,9 @@
// This must be done after we adjust the default_methods and
// default_vtable_indices for methods already in the vtable.
// If redefining Unsafe, walk all the vtables looking for entries.
- if (ik->vtable_length() > 0 && (_the_class_oop->is_interface()
- || _the_class_oop == SystemDictionary::internal_Unsafe_klass()
- || ik->is_subtype_of(_the_class_oop))) {
+ if (ik->vtable_length() > 0 && (_the_class->is_interface()
+ || _the_class == SystemDictionary::internal_Unsafe_klass()
+ || ik->is_subtype_of(_the_class))) {
// ik->vtable() creates a wrapper object; rm cleans it up
ResourceMark rm(_thread);
@@ -3328,9 +3326,9 @@
// every InstanceKlass that has an itable since there isn't a
// subclass relationship between an interface and an InstanceKlass.
// If redefining Unsafe, walk all the itables looking for entries.
- if (ik->itable_length() > 0 && (_the_class_oop->is_interface()
- || _the_class_oop == SystemDictionary::internal_Unsafe_klass()
- || ik->is_subclass_of(_the_class_oop))) {
+ if (ik->itable_length() > 0 && (_the_class->is_interface()
+ || _the_class == SystemDictionary::internal_Unsafe_klass()
+ || ik->is_subclass_of(_the_class))) {
// ik->itable() creates a wrapper object; rm cleans it up
ResourceMark rm(_thread);
@@ -3353,7 +3351,7 @@
constantPoolHandle other_cp;
ConstantPoolCache* cp_cache;
- if (ik != _the_class_oop) {
+ if (ik != _the_class) {
// this klass' constant pool cache may need adjustment
other_cp = constantPoolHandle(ik->constants());
cp_cache = other_cp->cache();
@@ -3499,7 +3497,7 @@
// obsolete methods need a unique idnum so they become new entries in
// the jmethodID cache in InstanceKlass
assert(old_method->method_idnum() == new_method->method_idnum(), "must match");
- u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum();
+ u2 num = InstanceKlass::cast(_the_class)->next_method_idnum();
if (num != ConstMethod::UNSET_IDNUM) {
old_method->set_method_idnum(num);
}
@@ -3563,7 +3561,7 @@
//
class TransferNativeFunctionRegistration {
private:
- instanceKlassHandle the_class;
+ InstanceKlass* the_class;
int prefix_count;
char** prefixes;
@@ -3578,7 +3576,7 @@
Symbol* signature) {
TempNewSymbol name_symbol = SymbolTable::probe(name_str, (int)name_len);
if (name_symbol != NULL) {
- Method* method = the_class()->lookup_method(name_symbol, signature);
+ Method* method = the_class->lookup_method(name_symbol, signature);
if (method != NULL) {
// Even if prefixed, intermediate methods must exist.
if (method->is_native()) {
@@ -3641,7 +3639,7 @@
public:
// Construct a native method transfer processor for this class.
- TransferNativeFunctionRegistration(instanceKlassHandle _the_class) {
+ TransferNativeFunctionRegistration(InstanceKlass* _the_class) {
assert(SafepointSynchronize::is_at_safepoint(), "sanity check");
the_class = _the_class;
@@ -3668,7 +3666,7 @@
};
// Don't lose the association between a native method and its JNI function.
-void VM_RedefineClasses::transfer_old_native_function_registrations(instanceKlassHandle the_class) {
+void VM_RedefineClasses::transfer_old_native_function_registrations(InstanceKlass* the_class) {
TransferNativeFunctionRegistration transfer(the_class);
transfer.transfer_registrations(_deleted_methods, _deleted_methods_length);
transfer.transfer_registrations(_matching_old_methods, _matching_methods_length);
@@ -3689,13 +3687,13 @@
// subsequent calls to RedefineClasses need only throw away code
// that depends on the class.
//
-void VM_RedefineClasses::flush_dependent_code(instanceKlassHandle k_h, TRAPS) {
+void VM_RedefineClasses::flush_dependent_code(InstanceKlass* ik, TRAPS) {
assert_locked_or_safepoint(Compile_lock);
// All dependencies have been recorded from startup or this is a second or
// subsequent use of RedefineClasses
if (JvmtiExport::all_dependencies_are_recorded()) {
- CodeCache::flush_evol_dependents_on(k_h);
+ CodeCache::flush_evol_dependents_on(ik);
} else {
CodeCache::mark_all_nmethods_for_deoptimization();
@@ -3775,8 +3773,8 @@
}
-void VM_RedefineClasses::swap_annotations(instanceKlassHandle the_class,
- instanceKlassHandle scratch_class) {
+void VM_RedefineClasses::swap_annotations(InstanceKlass* the_class,
+ InstanceKlass* scratch_class) {
// Swap annotation fields values
Annotations* old_annotations = the_class->annotations();
the_class->set_annotations(scratch_class->annotations());
@@ -3797,7 +3795,7 @@
// that we would like to pass to the helper method are saved in
// static global fields in the VM operation.
void VM_RedefineClasses::redefine_single_class(jclass the_jclass,
- Klass* scratch_class_oop, TRAPS) {
+ InstanceKlass* scratch_class, TRAPS) {
HandleMark hm(THREAD); // make sure handles from this call are freed
@@ -3805,25 +3803,24 @@
_timer_rsc_phase1.start();
}
- instanceKlassHandle scratch_class(THREAD, scratch_class_oop);
- instanceKlassHandle the_class(THREAD, get_ik(the_jclass));
+ InstanceKlass* the_class = get_ik(the_jclass);
// Remove all breakpoints in methods of this class
JvmtiBreakpoints& jvmti_breakpoints = JvmtiCurrentBreakpoints::get_jvmti_breakpoints();
- jvmti_breakpoints.clearall_in_class_at_safepoint(the_class());
+ jvmti_breakpoints.clearall_in_class_at_safepoint(the_class);
// Deoptimize all compiled code that depends on this class
flush_dependent_code(the_class, THREAD);
_old_methods = the_class->methods();
_new_methods = scratch_class->methods();
- _the_class_oop = the_class();
+ _the_class = the_class;
compute_added_deleted_matching_methods();
update_jmethod_ids();
// Attach new constant pool to the original klass. The original
// klass still refers to the old constant pool (for now).
- scratch_class->constants()->set_pool_holder(the_class());
+ scratch_class->constants()->set_pool_holder(the_class);
#if 0
// In theory, with constant pool merging in place we should be able
@@ -3853,13 +3850,11 @@
{
// walk all previous versions of the klass
- InstanceKlass *ik = (InstanceKlass *)the_class();
+ InstanceKlass *ik = the_class;
PreviousVersionWalker pvw(ik);
- instanceKlassHandle ikh;
do {
- ikh = pvw.next_previous_version();
- if (!ikh.is_null()) {
- ik = ikh();
+ ik = pvw.next_previous_version();
+ if (ik != NULL) {
// attach previous version of klass to the new constant pool
ik->set_constants(scratch_class->constants());
@@ -3872,7 +3867,7 @@
method->set_constants(scratch_class->constants());
}
}
- } while (!ikh.is_null());
+ } while (ik != NULL);
}
#endif
@@ -4041,7 +4036,7 @@
MemberNameTable* mnt = the_class->member_names();
if (mnt != NULL) {
bool trace_name_printed = false;
- mnt->adjust_method_entries(the_class(), &trace_name_printed);
+ mnt->adjust_method_entries(the_class, &trace_name_printed);
}
if (the_class->oop_map_cache() != NULL) {
@@ -4050,11 +4045,11 @@
the_class->oop_map_cache()->flush_obsolete_entries();
}
+ increment_class_counter((InstanceKlass *)the_class, THREAD);
{
ResourceMark rm(THREAD);
// increment the classRedefinedCount field in the_class and in any
// direct and indirect subclasses of the_class
- increment_class_counter((InstanceKlass *)the_class(), THREAD);
log_info(redefine, class, load)
("redefined name=%s, count=%d (avail_mem=" UINT64_FORMAT "K)",
the_class->external_name(), java_lang_Class::classRedefinedCount(the_class->java_mirror()), os::available_memory() >> 10);
@@ -4075,8 +4070,8 @@
int new_count = java_lang_Class::classRedefinedCount(class_mirror) + 1;
java_lang_Class::set_classRedefinedCount(class_mirror, new_count);
- if (class_oop != _the_class_oop) {
- // _the_class_oop count is printed at end of redefine_single_class()
+ if (class_oop != _the_class) {
+ // _the_class count is printed at end of redefine_single_class()
log_debug(redefine, class, subclass)("updated count in subclass=%s to %d", ik->external_name(), new_count);
}
@@ -4212,8 +4207,8 @@
void VM_RedefineClasses::print_on_error(outputStream* st) const {
VM_Operation::print_on_error(st);
- if (_the_class_oop != NULL) {
+ if (_the_class != NULL) {
ResourceMark rm;
- st->print_cr(", redefining class %s", _the_class_oop->external_name());
+ st->print_cr(", redefining class %s", _the_class->external_name());
}
}
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -348,7 +348,7 @@
static int _matching_methods_length;
static int _deleted_methods_length;
static int _added_methods_length;
- static Klass* _the_class_oop;
+ static Klass* _the_class;
// The instance fields are used to pass information from
// doit_prologue() to doit() and doit_epilogue().
@@ -371,7 +371,7 @@
intArray * _operands_index_map_p;
// ptr to _class_count scratch_classes
- Klass** _scratch_classes;
+ InstanceKlass** _scratch_classes;
jvmtiError _res;
// Performance measurement support. These timers do not cover all
@@ -393,7 +393,7 @@
// the restrictions of RedefineClasses. Normalize the order of
// overloaded methods as needed.
jvmtiError compare_and_normalize_class_versions(
- instanceKlassHandle the_class, instanceKlassHandle scratch_class);
+ InstanceKlass* the_class, InstanceKlass* scratch_class);
// Figure out which new methods match old methods in name and signature,
// which methods have been added, and which are no longer present
@@ -405,14 +405,14 @@
// In addition to marking methods as old and/or obsolete, this routine
// counts the number of methods that are EMCP (Equivalent Module Constant Pool).
int check_methods_and_mark_as_obsolete();
- void transfer_old_native_function_registrations(instanceKlassHandle the_class);
+ void transfer_old_native_function_registrations(InstanceKlass* the_class);
// Install the redefinition of a class
void redefine_single_class(jclass the_jclass,
- Klass* scratch_class_oop, TRAPS);
+ InstanceKlass* scratch_class_oop, TRAPS);
- void swap_annotations(instanceKlassHandle new_class,
- instanceKlassHandle scratch_class);
+ void swap_annotations(InstanceKlass* new_class,
+ InstanceKlass* scratch_class);
// Increment the classRedefinedCount field in the specific InstanceKlass
// and in all direct and indirect subclasses.
@@ -437,18 +437,18 @@
bool merge_constant_pools(const constantPoolHandle& old_cp,
const constantPoolHandle& scratch_cp, constantPoolHandle *merge_cp_p,
int *merge_cp_length_p, TRAPS);
- jvmtiError merge_cp_and_rewrite(instanceKlassHandle the_class,
- instanceKlassHandle scratch_class, TRAPS);
+ jvmtiError merge_cp_and_rewrite(InstanceKlass* the_class,
+ InstanceKlass* scratch_class, TRAPS);
u2 rewrite_cp_ref_in_annotation_data(
AnnotationArray* annotations_typeArray, int &byte_i_ref,
const char * trace_mesg, TRAPS);
- bool rewrite_cp_refs(instanceKlassHandle scratch_class, TRAPS);
+ bool rewrite_cp_refs(InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_annotation_struct(
AnnotationArray* class_annotations, int &byte_i_ref, TRAPS);
bool rewrite_cp_refs_in_annotations_typeArray(
AnnotationArray* annotations_typeArray, int &byte_i_ref, TRAPS);
bool rewrite_cp_refs_in_class_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_element_value(
AnnotationArray* class_annotations, int &byte_i_ref, TRAPS);
bool rewrite_cp_refs_in_type_annotations_typeArray(
@@ -463,31 +463,31 @@
bool skip_type_annotation_type_path(
AnnotationArray* type_annotations_typeArray, int &byte_i_ref, TRAPS);
bool rewrite_cp_refs_in_fields_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
void rewrite_cp_refs_in_method(methodHandle method,
methodHandle * new_method_p, TRAPS);
- bool rewrite_cp_refs_in_methods(instanceKlassHandle scratch_class, TRAPS);
+ bool rewrite_cp_refs_in_methods(InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_methods_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_methods_default_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_methods_parameter_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_class_type_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_fields_type_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
bool rewrite_cp_refs_in_methods_type_annotations(
- instanceKlassHandle scratch_class, TRAPS);
+ InstanceKlass* scratch_class, TRAPS);
void rewrite_cp_refs_in_stack_map_table(const methodHandle& method, TRAPS);
void rewrite_cp_refs_in_verification_type_info(
address& stackmap_addr_ref, address stackmap_end, u2 frame_i,
u1 frame_size, TRAPS);
void set_new_constant_pool(ClassLoaderData* loader_data,
- instanceKlassHandle scratch_class,
+ InstanceKlass* scratch_class,
constantPoolHandle scratch_cp, int scratch_cp_length, TRAPS);
- void flush_dependent_code(instanceKlassHandle k_h, TRAPS);
+ void flush_dependent_code(InstanceKlass* ik, TRAPS);
// lock classes to redefine since constant pool merging isn't thread safe.
void lock_classes();
--- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -783,7 +783,7 @@
void add(int index, char type, int offset);
// returns the field count for the given class
- static int compute_field_count(instanceKlassHandle ikh);
+ static int compute_field_count(InstanceKlass* ik);
public:
~ClassFieldMap();
@@ -819,16 +819,16 @@
//
ClassFieldMap* ClassFieldMap::create_map_of_static_fields(Klass* k) {
HandleMark hm;
- instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// create the field map
ClassFieldMap* field_map = new ClassFieldMap();
- FilteredFieldStream f(ikh, false, false);
+ FilteredFieldStream f(ik, false, false);
int max_field_index = f.field_count()-1;
int index = 0;
- for (FilteredFieldStream fld(ikh, true, true); !fld.eos(); fld.next(), index++) {
+ for (FilteredFieldStream fld(ik, true, true); !fld.eos(); fld.next(), index++) {
// ignore instance fields
if (!fld.access_flags().is_static()) {
continue;
@@ -844,17 +844,17 @@
//
ClassFieldMap* ClassFieldMap::create_map_of_instance_fields(oop obj) {
HandleMark hm;
- instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), obj->klass());
+ InstanceKlass* ik = InstanceKlass::cast(obj->klass());
// create the field map
ClassFieldMap* field_map = new ClassFieldMap();
- FilteredFieldStream f(ikh, false, false);
+ FilteredFieldStream f(ik, false, false);
int max_field_index = f.field_count()-1;
int index = 0;
- for (FilteredFieldStream fld(ikh, false, false); !fld.eos(); fld.next(), index++) {
+ for (FilteredFieldStream fld(ik, false, false); !fld.eos(); fld.next(), index++) {
// ignore static fields
if (fld.access_flags().is_static()) {
continue;
@@ -1008,9 +1008,9 @@
}
// helper function to indicate if an object is filtered by a klass filter
-static inline bool is_filtered_by_klass_filter(oop obj, KlassHandle klass_filter) {
- if (!klass_filter.is_null()) {
- if (obj->klass() != klass_filter()) {
+static inline bool is_filtered_by_klass_filter(oop obj, Klass* klass_filter) {
+ if (klass_filter != NULL) {
+ if (obj->klass() != klass_filter) {
return true;
}
}
@@ -1272,7 +1272,7 @@
class IterateOverHeapObjectClosure: public ObjectClosure {
private:
JvmtiTagMap* _tag_map;
- KlassHandle _klass;
+ Klass* _klass;
jvmtiHeapObjectFilter _object_filter;
jvmtiHeapObjectCallback _heap_object_callback;
const void* _user_data;
@@ -1281,7 +1281,7 @@
JvmtiTagMap* tag_map() const { return _tag_map; }
jvmtiHeapObjectFilter object_filter() const { return _object_filter; }
jvmtiHeapObjectCallback object_callback() const { return _heap_object_callback; }
- KlassHandle klass() const { return _klass; }
+ Klass* klass() const { return _klass; }
const void* user_data() const { return _user_data; }
// indicates if iteration has been aborted
@@ -1291,7 +1291,7 @@
public:
IterateOverHeapObjectClosure(JvmtiTagMap* tag_map,
- KlassHandle klass,
+ Klass* klass,
jvmtiHeapObjectFilter object_filter,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data) :
@@ -1316,7 +1316,7 @@
if (!ServiceUtil::visible_oop(o)) return;
// instanceof check when filtering by klass
- if (!klass().is_null() && !o->is_a(klass()())) {
+ if (klass() != NULL && !o->is_a(klass())) {
return;
}
// prepare for the calllback
@@ -1345,7 +1345,7 @@
class IterateThroughHeapObjectClosure: public ObjectClosure {
private:
JvmtiTagMap* _tag_map;
- KlassHandle _klass;
+ Klass* _klass;
int _heap_filter;
const jvmtiHeapCallbacks* _callbacks;
const void* _user_data;
@@ -1354,7 +1354,7 @@
JvmtiTagMap* tag_map() const { return _tag_map; }
int heap_filter() const { return _heap_filter; }
const jvmtiHeapCallbacks* callbacks() const { return _callbacks; }
- KlassHandle klass() const { return _klass; }
+ Klass* klass() const { return _klass; }
const void* user_data() const { return _user_data; }
// indicates if the iteration has been aborted
@@ -1374,7 +1374,7 @@
public:
IterateThroughHeapObjectClosure(JvmtiTagMap* tag_map,
- KlassHandle klass,
+ Klass* klass,
int heap_filter,
const jvmtiHeapCallbacks* heap_callbacks,
const void* user_data) :
@@ -1470,7 +1470,7 @@
// Deprecated function to iterate over all objects in the heap
void JvmtiTagMap::iterate_over_heap(jvmtiHeapObjectFilter object_filter,
- KlassHandle klass,
+ Klass* klass,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data)
{
@@ -1487,7 +1487,7 @@
// Iterates over all objects in the heap
void JvmtiTagMap::iterate_through_heap(jint heap_filter,
- KlassHandle klass,
+ Klass* klass,
const jvmtiHeapCallbacks* callbacks,
const void* user_data)
{
@@ -1806,14 +1806,14 @@
class AdvancedHeapWalkContext: public HeapWalkContext {
private:
jint _heap_filter;
- KlassHandle _klass_filter;
+ Klass* _klass_filter;
const jvmtiHeapCallbacks* _heap_callbacks;
public:
AdvancedHeapWalkContext() : HeapWalkContext(false) { }
AdvancedHeapWalkContext(jint heap_filter,
- KlassHandle klass_filter,
+ Klass* klass_filter,
const jvmtiHeapCallbacks* heap_callbacks) :
HeapWalkContext(true),
_heap_filter(heap_filter),
@@ -1823,7 +1823,7 @@
// accessors
jint heap_filter() const { return _heap_filter; }
- KlassHandle klass_filter() const { return _klass_filter; }
+ Klass* klass_filter() const { return _klass_filter; }
const jvmtiHeapReferenceCallback heap_reference_callback() const {
return _heap_callbacks->heap_reference_callback;
@@ -3296,7 +3296,7 @@
// follow references from an initial object or the GC roots
void JvmtiTagMap::follow_references(jint heap_filter,
- KlassHandle klass,
+ Klass* klass,
jobject object,
const jvmtiHeapCallbacks* callbacks,
const void* user_data)
--- a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -91,7 +91,7 @@
// deprecated heap iteration functions
void iterate_over_heap(jvmtiHeapObjectFilter object_filter,
- KlassHandle klass,
+ Klass* klass,
jvmtiHeapObjectCallback heap_object_callback,
const void* user_data);
@@ -107,12 +107,12 @@
// advanced (JVMTI 1.1) heap iteration functions
void iterate_through_heap(jint heap_filter,
- KlassHandle klass,
+ Klass* klass,
const jvmtiHeapCallbacks* callbacks,
const void* user_data);
void follow_references(jint heap_filter,
- KlassHandle klass,
+ Klass* klass,
jobject initial_object,
const jvmtiHeapCallbacks* callbacks,
const void* user_data);
--- a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -93,7 +93,7 @@
// Used to send class being redefined/retransformed and kind of transform
// info to the class file load hook event handler.
- KlassHandle *_class_being_redefined;
+ Klass* _class_being_redefined;
JvmtiClassLoadKind _class_load_kind;
// This is only valid when is_interp_only_mode() returns true
@@ -220,8 +220,8 @@
// when class file load hook event is posted.
// It is set while loading redefined class and cleared before the
// class file load hook event is posted.
- inline void set_class_being_redefined(KlassHandle *h_class, JvmtiClassLoadKind kind) {
- _class_being_redefined = h_class;
+ inline void set_class_being_redefined(Klass* k, JvmtiClassLoadKind kind) {
+ _class_being_redefined = k;
_class_load_kind = kind;
}
@@ -230,7 +230,7 @@
_class_load_kind = jvmti_class_load_kind_load;
}
- inline KlassHandle *get_class_being_redefined() {
+ inline Klass* get_class_being_redefined() {
return _class_being_redefined;
}
@@ -271,12 +271,12 @@
// used by the verifier, so there is no extra performance issue with it.
private:
- KlassHandle *_the_class_for_redefinition_verification;
- KlassHandle *_scratch_class_for_redefinition_verification;
+ Klass* _the_class_for_redefinition_verification;
+ Klass* _scratch_class_for_redefinition_verification;
public:
- inline void set_class_versions_map(KlassHandle *the_class,
- KlassHandle *scratch_class) {
+ inline void set_class_versions_map(Klass* the_class,
+ Klass* scratch_class) {
_the_class_for_redefinition_verification = the_class;
_scratch_class_for_redefinition_verification = scratch_class;
}
@@ -288,8 +288,8 @@
JavaThread *thread) {
JvmtiThreadState *state = thread->jvmti_thread_state();
if (state != NULL && state->_the_class_for_redefinition_verification != NULL) {
- if ((*(state->_the_class_for_redefinition_verification))() == klass) {
- klass = (*(state->_scratch_class_for_redefinition_verification))();
+ if (state->_the_class_for_redefinition_verification == klass) {
+ klass = state->_scratch_class_for_redefinition_verification;
}
}
return klass;
@@ -409,17 +409,17 @@
class RedefineVerifyMark : public StackObj {
private:
- JvmtiThreadState *_state;
- KlassHandle _scratch_class;
+ JvmtiThreadState* _state;
+ Klass* _scratch_class;
Handle _scratch_mirror;
public:
- RedefineVerifyMark(KlassHandle *the_class, KlassHandle *scratch_class,
- JvmtiThreadState *state) : _state(state), _scratch_class(*scratch_class)
+ RedefineVerifyMark(Klass* the_class, Klass* scratch_class,
+ JvmtiThreadState *state) : _state(state), _scratch_class(scratch_class)
{
_state->set_class_versions_map(the_class, scratch_class);
_scratch_mirror = Handle(Thread::current(), _scratch_class->java_mirror());
- (*scratch_class)->set_java_mirror((*the_class)->java_mirror());
+ _scratch_class->set_java_mirror(the_class->java_mirror());
}
~RedefineVerifyMark() {
--- a/hotspot/src/share/vm/prims/methodHandles.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -124,7 +124,7 @@
Handle MethodHandles::new_MemberName(TRAPS) {
Handle empty;
- instanceKlassHandle k(THREAD, SystemDictionary::MemberName_klass());
+ InstanceKlass* k = SystemDictionary::MemberName_klass();
if (!k->is_initialized()) k->initialize(CHECK_(empty));
return Handle(THREAD, k->allocate_instance(THREAD));
}
@@ -138,9 +138,9 @@
if (target_klass == SystemDictionary::reflect_Field_klass()) {
oop clazz = java_lang_reflect_Field::clazz(target_oop); // fd.field_holder()
int slot = java_lang_reflect_Field::slot(target_oop); // fd.index()
- KlassHandle k(thread, java_lang_Class::as_Klass(clazz));
- if (!k.is_null() && k->is_instance_klass()) {
- fieldDescriptor fd(InstanceKlass::cast(k()), slot);
+ Klass* k = java_lang_Class::as_Klass(clazz);
+ if (k != NULL && k->is_instance_klass()) {
+ fieldDescriptor fd(InstanceKlass::cast(k), slot);
oop mname2 = init_field_MemberName(mname, fd);
if (mname2 != NULL) {
// Since we have the reified name and type handy, add them to the result.
@@ -154,22 +154,22 @@
} else if (target_klass == SystemDictionary::reflect_Method_klass()) {
oop clazz = java_lang_reflect_Method::clazz(target_oop);
int slot = java_lang_reflect_Method::slot(target_oop);
- KlassHandle k(thread, java_lang_Class::as_Klass(clazz));
- if (!k.is_null() && k->is_instance_klass()) {
- Method* m = InstanceKlass::cast(k())->method_with_idnum(slot);
+ Klass* k = java_lang_Class::as_Klass(clazz);
+ if (k != NULL && k->is_instance_klass()) {
+ Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
if (m == NULL || is_signature_polymorphic(m->intrinsic_id()))
return NULL; // do not resolve unless there is a concrete signature
- CallInfo info(m, k());
+ CallInfo info(m, k);
return init_method_MemberName(mname, info);
}
} else if (target_klass == SystemDictionary::reflect_Constructor_klass()) {
oop clazz = java_lang_reflect_Constructor::clazz(target_oop);
int slot = java_lang_reflect_Constructor::slot(target_oop);
- KlassHandle k(thread, java_lang_Class::as_Klass(clazz));
- if (!k.is_null() && k->is_instance_klass()) {
- Method* m = InstanceKlass::cast(k())->method_with_idnum(slot);
+ Klass* k = java_lang_Class::as_Klass(clazz);
+ if (k != NULL && k->is_instance_klass()) {
+ Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
if (m == NULL) return NULL;
- CallInfo info(m, k());
+ CallInfo info(m, k);
return init_method_MemberName(mname, info);
}
}
@@ -180,8 +180,8 @@
assert(info.resolved_appendix().is_null(), "only normal methods here");
methodHandle m = info.resolved_method();
assert(m.not_null(), "null method handle");
- KlassHandle m_klass = m->method_holder();
- assert(m.not_null(), "null holder for method handle");
+ Klass* m_klass = m->method_holder();
+ assert(m_klass != NULL, "null holder for method handle");
int flags = (jushort)( m->access_flags().as_short() & JVM_RECOGNIZED_METHOD_MODIFIERS );
int vmindex = Method::invalid_vtable_index;
@@ -208,12 +208,12 @@
case CallInfo::vtable_call:
vmindex = info.vtable_index();
flags |= IS_METHOD | (JVM_REF_invokeVirtual << REFERENCE_KIND_SHIFT);
- assert(info.resolved_klass()->is_subtype_of(m_klass()), "virtual call must be type-safe");
+ assert(info.resolved_klass()->is_subtype_of(m_klass), "virtual call must be type-safe");
if (m_klass->is_interface()) {
// This is a vtable call to an interface method (abstract "miranda method" or default method).
// The vtable index is meaningless without a class (not interface) receiver type, so get one.
// (LinkResolver should help us figure this out.)
- KlassHandle m_klass_non_interface = info.resolved_klass();
+ Klass* m_klass_non_interface = info.resolved_klass();
if (m_klass_non_interface->is_interface()) {
m_klass_non_interface = SystemDictionary::Object_klass();
#ifdef ASSERT
@@ -229,7 +229,7 @@
assert(m->is_public(), "virtual call must be to public interface method");
return NULL; // elicit an error later in product build
}
- assert(info.resolved_klass()->is_subtype_of(m_klass_non_interface()), "virtual call must be type-safe");
+ assert(info.resolved_klass()->is_subtype_of(m_klass_non_interface), "virtual call must be type-safe");
m_klass = m_klass_non_interface;
}
if (TraceInvokeDynamic) {
@@ -637,7 +637,7 @@
// An unresolved member name is a mere symbolic reference.
// Resolving it plants a vmtarget/vmindex in it,
// which refers directly to JVM internals.
-Handle MethodHandles::resolve_MemberName(Handle mname, KlassHandle caller, TRAPS) {
+Handle MethodHandles::resolve_MemberName(Handle mname, Klass* caller, TRAPS) {
Handle empty;
assert(java_lang_invoke_MemberName::is_instance(mname()), "");
@@ -664,7 +664,7 @@
THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "nothing to resolve", empty);
}
- instanceKlassHandle defc;
+ InstanceKlass* defc = NULL;
{
Klass* defc_klass = java_lang_Class::as_Klass(defc_oop());
if (defc_klass == NULL) return empty; // a primitive; no resolution possible
@@ -672,9 +672,9 @@
if (!defc_klass->is_array_klass()) return empty;
defc_klass = SystemDictionary::Object_klass();
}
- defc = instanceKlassHandle(THREAD, defc_klass);
+ defc = InstanceKlass::cast(defc_klass);
}
- if (defc.is_null()) {
+ if (defc == NULL) {
THROW_MSG_(vmSymbols::java_lang_InternalError(), "primitive class", empty);
}
defc->link_class(CHECK_(empty)); // possible safepoint
@@ -687,7 +687,7 @@
vmIntrinsics::ID mh_invoke_id = vmIntrinsics::_none;
if ((flags & ALL_KINDS) == IS_METHOD &&
- (defc() == SystemDictionary::MethodHandle_klass()) &&
+ (defc == SystemDictionary::MethodHandle_klass()) &&
(ref_kind == JVM_REF_invokeVirtual ||
ref_kind == JVM_REF_invokeSpecial ||
// static invocation mode is required for _linkToVirtual, etc.:
@@ -705,7 +705,7 @@
TempNewSymbol type = lookup_signature(type_str(), (mh_invoke_id != vmIntrinsics::_none), CHECK_(empty));
if (type == NULL) return empty; // no such signature exists in the VM
- LinkInfo::AccessCheck access_check = caller.not_null() ?
+ LinkInfo::AccessCheck access_check = caller != NULL ?
LinkInfo::needs_access_check :
LinkInfo::skip_access_check;
@@ -840,7 +840,7 @@
{
assert(vmtarget->is_klass(), "field vmtarget is Klass*");
if (!((Klass*) vmtarget)->is_instance_klass()) break;
- instanceKlassHandle defc(THREAD, (Klass*) vmtarget);
+ InstanceKlass* defc = InstanceKlass::cast((Klass*) vmtarget);
DEBUG_ONLY(vmtarget = NULL); // safety
bool is_static = ((flags & JVM_ACC_STATIC) != 0);
fieldDescriptor fd; // find_field initializes fd if found
@@ -868,15 +868,15 @@
THROW_MSG(vmSymbols::java_lang_InternalError(), "unrecognized MemberName format");
}
-int MethodHandles::find_MemberNames(KlassHandle k,
+int MethodHandles::find_MemberNames(Klass* k,
Symbol* name, Symbol* sig,
- int mflags, KlassHandle caller,
+ int mflags, Klass* caller,
int skip, objArrayHandle results) {
// %%% take caller into account!
Thread* thread = Thread::current();
- if (k.is_null() || !k->is_instance_klass()) return -1;
+ if (k == NULL || !k->is_instance_klass()) return -1;
int rfill = 0, rlimit = results->length(), rskip = skip;
// overflow measurement:
@@ -904,7 +904,8 @@
}
if ((match_flags & IS_FIELD) != 0) {
- for (FieldStream st(k(), local_only, !search_intfc); !st.eos(); st.next()) {
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ for (FieldStream st(ik, local_only, !search_intfc); !st.eos(); st.next()) {
if (name != NULL && st.name() != name)
continue;
if (sig != NULL && st.signature() != sig)
@@ -950,7 +951,8 @@
} else {
// caller will accept either sort; no need to adjust name
}
- for (MethodStream st(k(), local_only, !search_intfc); !st.eos(); st.next()) {
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ for (MethodStream st(ik, local_only, !search_intfc); !st.eos(); st.next()) {
Method* m = st.method();
Symbol* m_name = m->name();
if (m_name == clinit_name)
@@ -1238,9 +1240,8 @@
}
}
- KlassHandle caller(THREAD,
- caller_jh == NULL ? (Klass*) NULL :
- java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh)));
+ Klass* caller = caller_jh == NULL ? NULL :
+ java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh));
Handle resolved = MethodHandles::resolve_MemberName(mname, caller, CHECK_NULL);
if (resolved.is_null()) {
@@ -1330,7 +1331,7 @@
jclass clazz_jh, jstring name_jh, jstring sig_jh,
int mflags, jclass caller_jh, jint skip, jobjectArray results_jh)) {
if (clazz_jh == NULL || results_jh == NULL) return -1;
- KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz_jh)));
+ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz_jh));
objArrayHandle results(THREAD, (objArrayOop) JNIHandles::resolve(results_jh));
if (results.is_null() || !results->is_objArray()) return -1;
@@ -1346,11 +1347,11 @@
if (sig == NULL) return 0; // a match is not possible
}
- KlassHandle caller;
+ Klass* caller = NULL;
if (caller_jh != NULL) {
oop caller_oop = JNIHandles::resolve_non_null(caller_jh);
if (!java_lang_Class::is_instance(caller_oop)) return -1;
- caller = KlassHandle(THREAD, java_lang_Class::as_Klass(caller_oop));
+ caller = java_lang_Class::as_Klass(caller_oop);
}
if (name != NULL && sig != NULL && results.not_null()) {
--- a/hotspot/src/share/vm/prims/methodHandles.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/methodHandles.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -61,15 +61,15 @@
public:
// working with member names
- static Handle resolve_MemberName(Handle mname, KlassHandle caller, TRAPS); // compute vmtarget/vmindex from name/type
+ static Handle resolve_MemberName(Handle mname, Klass* caller, TRAPS); // compute vmtarget/vmindex from name/type
static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing
static Handle new_MemberName(TRAPS); // must be followed by init_MemberName
static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target
static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false);
static oop init_method_MemberName(Handle mname_h, CallInfo& info, bool intern = true);
static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true);
- static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig,
- int mflags, KlassHandle caller,
+ static int find_MemberNames(Klass* k, Symbol* name, Symbol* sig,
+ int mflags, Klass* caller,
int skip, objArrayHandle results);
// bit values for suppress argument to expand_MemberName:
enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 };
--- a/hotspot/src/share/vm/prims/nativeLookup.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/nativeLookup.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -175,7 +175,7 @@
}
// Otherwise call static method findNative in ClassLoader
- KlassHandle klass (THREAD, SystemDictionary::ClassLoader_klass());
+ Klass* klass = SystemDictionary::ClassLoader_klass();
Handle name_arg = java_lang_String::create_from_str(jni_name, CHECK_NULL);
JavaValue result(T_LONG);
@@ -345,9 +345,8 @@
int wrapper_name_len = (int)strlen(wrapper_name);
TempNewSymbol wrapper_symbol = SymbolTable::probe(wrapper_name, wrapper_name_len);
if (wrapper_symbol != NULL) {
- KlassHandle kh(method->method_holder());
- Method* wrapper_method = kh()->lookup_method(wrapper_symbol,
- method->signature());
+ Klass* k = method->method_holder();
+ Method* wrapper_method = k->lookup_method(wrapper_symbol, method->signature());
if (wrapper_method != NULL && !wrapper_method->is_native()) {
// we found a wrapper method, use its native entry
method->set_is_prefixed_native();
@@ -402,7 +401,7 @@
// Find the class
Klass* k = SystemDictionary::resolve_or_fail(c_name, true, CATCH);
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* klass = InstanceKlass::cast(k);
// Find method and invoke standard lookup
methodHandle method (THREAD,
--- a/hotspot/src/share/vm/prims/stackwalk.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/stackwalk.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -179,7 +179,7 @@
oop LiveFrameStream::create_primitive_slot_instance(StackValueCollection* values,
int i, BasicType type, TRAPS) {
Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_LiveStackFrameInfo(), CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
JavaValue result(T_OBJECT);
JavaCallArguments args;
--- a/hotspot/src/share/vm/prims/unsafe.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/unsafe.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -845,7 +845,7 @@
// not just a literal string. For such ldc instructions, the verifier uses the
// type Object instead of String, if the loaded constant is not in fact a String.
-static instanceKlassHandle
+static InstanceKlass*
Unsafe_DefineAnonymousClass_impl(JNIEnv *env,
jclass host_class, jbyteArray data, jobjectArray cp_patches_jh,
u1** temp_alloc,
@@ -932,18 +932,17 @@
return NULL;
}
- return instanceKlassHandle(THREAD, anonk);
+ return InstanceKlass::cast(anonk);
}
UNSAFE_ENTRY(jclass, Unsafe_DefineAnonymousClass0(JNIEnv *env, jobject unsafe, jclass host_class, jbyteArray data, jobjectArray cp_patches_jh)) {
ResourceMark rm(THREAD);
- instanceKlassHandle anon_klass;
jobject res_jh = NULL;
u1* temp_alloc = NULL;
- anon_klass = Unsafe_DefineAnonymousClass_impl(env, host_class, data, cp_patches_jh, &temp_alloc, THREAD);
- if (anon_klass() != NULL) {
+ InstanceKlass* anon_klass = Unsafe_DefineAnonymousClass_impl(env, host_class, data, cp_patches_jh, &temp_alloc, THREAD);
+ if (anon_klass != NULL) {
res_jh = JNIHandles::make_local(env, anon_klass->java_mirror());
}
@@ -955,7 +954,7 @@
// The anonymous class loader data has been artificially been kept alive to
// this point. The mirror and any instances of this class have to keep
// it alive afterwards.
- if (anon_klass() != NULL) {
+ if (anon_klass != NULL) {
anon_klass->class_loader_data()->dec_keep_alive();
}
--- a/hotspot/src/share/vm/prims/whitebox.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/prims/whitebox.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -782,8 +782,8 @@
WB_END
WB_ENTRY(jboolean, WB_EnqueueInitializerForCompilation(JNIEnv* env, jobject o, jclass klass, jint comp_level))
- instanceKlassHandle ikh(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
- return WhiteBox::compile_method(ikh->class_initializer(), comp_level, InvocationEntryBci, THREAD);
+ InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
+ return WhiteBox::compile_method(ik->class_initializer(), comp_level, InvocationEntryBci, THREAD);
WB_END
WB_ENTRY(jboolean, WB_ShouldPrintAssembly(JNIEnv* env, jobject o, jobject method, jint comp_level))
@@ -1517,8 +1517,8 @@
WB_END
WB_ENTRY(jlong, WB_GetConstantPool(JNIEnv* env, jobject wb, jclass klass))
- instanceKlassHandle ikh(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
- return (jlong) ikh->constants();
+ InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
+ return (jlong) ik->constants();
WB_END
WB_ENTRY(jint, WB_GetConstantPoolCacheIndexTag(JNIEnv* env, jobject wb))
@@ -1526,8 +1526,8 @@
WB_END
WB_ENTRY(jint, WB_GetConstantPoolCacheLength(JNIEnv* env, jobject wb, jclass klass))
- instanceKlassHandle ikh(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
- ConstantPool* cp = ikh->constants();
+ InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
+ ConstantPool* cp = ik->constants();
if (cp->cache() == NULL) {
return -1;
}
@@ -1535,8 +1535,8 @@
WB_END
WB_ENTRY(jint, WB_ConstantPoolRemapInstructionOperandFromCache(JNIEnv* env, jobject wb, jclass klass, jint index))
- instanceKlassHandle ikh(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
- ConstantPool* cp = ikh->constants();
+ InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass)));
+ ConstantPool* cp = ik->constants();
if (cp->cache() == NULL) {
THROW_MSG_0(vmSymbols::java_lang_IllegalStateException(), "Constant pool does not have a cache");
}
@@ -1950,8 +1950,8 @@
{
if (WhiteBoxAPI) {
// Make sure that wbclass is loaded by the null classloader
- instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
- Handle loader(THREAD, ikh->class_loader());
+ InstanceKlass* ik = InstanceKlass::cast(JNIHandles::resolve(wbclass)->klass());
+ Handle loader(THREAD, ik->class_loader());
if (loader.is_null()) {
WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
WhiteBox::register_extended(env, wbclass, thread);
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -810,19 +810,19 @@
assert(objects->at(i)->is_object(), "invalid debug information");
ObjectValue* sv = (ObjectValue*) objects->at(i);
- KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
+ Klass* k = java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()());
oop obj = NULL;
if (k->is_instance_klass()) {
- InstanceKlass* ik = InstanceKlass::cast(k());
+ InstanceKlass* ik = InstanceKlass::cast(k);
obj = ik->allocate_instance(THREAD);
} else if (k->is_typeArray_klass()) {
- TypeArrayKlass* ak = TypeArrayKlass::cast(k());
+ TypeArrayKlass* ak = TypeArrayKlass::cast(k);
assert(sv->field_size() % type2size[ak->element_type()] == 0, "non-integral array length");
int len = sv->field_size() / type2size[ak->element_type()];
obj = ak->allocate(len, THREAD);
} else if (k->is_objArray_klass()) {
- ObjArrayKlass* ak = ObjArrayKlass::cast(k());
+ ObjArrayKlass* ak = ObjArrayKlass::cast(k);
obj = ak->allocate(sv->field_size(), THREAD);
}
@@ -1079,7 +1079,7 @@
void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects, bool realloc_failures, bool skip_internal) {
for (int i = 0; i < objects->length(); i++) {
ObjectValue* sv = (ObjectValue*) objects->at(i);
- KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
+ Klass* k = java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()());
Handle obj = sv->value();
assert(obj.not_null() || realloc_failures, "reallocation was missed");
if (PrintDeoptimizationDetails) {
@@ -1090,10 +1090,10 @@
}
if (k->is_instance_klass()) {
- InstanceKlass* ik = InstanceKlass::cast(k());
+ InstanceKlass* ik = InstanceKlass::cast(k);
reassign_fields_by_klass(ik, fr, reg_map, sv, 0, obj(), skip_internal);
} else if (k->is_typeArray_klass()) {
- TypeArrayKlass* ak = TypeArrayKlass::cast(k());
+ TypeArrayKlass* ak = TypeArrayKlass::cast(k);
reassign_type_array_elements(fr, reg_map, sv, (typeArrayOop) obj(), ak->element_type());
} else if (k->is_objArray_klass()) {
reassign_object_array_elements(fr, reg_map, sv, (objArrayOop) obj());
@@ -1137,7 +1137,7 @@
for (int i = 0; i < objects->length(); i++) {
ObjectValue* sv = (ObjectValue*) objects->at(i);
- KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()()));
+ Klass* k = java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()());
Handle obj = sv->value();
tty->print(" object <" INTPTR_FORMAT "> of type ", p2i(sv->value()()));
--- a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -61,10 +61,10 @@
reinitialize(ik, index);
}
Symbol* name() const {
- return field()->name(_cp);
+ return field()->name(_cp());
}
Symbol* signature() const {
- return field()->signature(_cp);
+ return field()->signature(_cp());
}
InstanceKlass* field_holder() const { return _cp->pool_holder(); }
ConstantPool* constants() const { return _cp(); }
--- a/hotspot/src/share/vm/runtime/handles.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/handles.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -218,9 +218,4 @@
area->_no_handle_mark_nesting = _no_handle_mark_nesting;
}
-bool instanceKlassHandle::is_instanceKlass(const Klass* k) {
- // Need this to avoid circular include dependency
- return k->is_instance_klass();
-}
-
#endif
--- a/hotspot/src/share/vm/runtime/handles.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/handles.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -166,48 +166,6 @@
DEF_METADATA_HANDLE(method, Method)
DEF_METADATA_HANDLE(constantPool, ConstantPool)
-// Writing this class explicitly, since DEF_METADATA_HANDLE(klass) doesn't
-// provide the necessary Klass* <-> Klass* conversions. This Klass
-// could be removed when we don't have the Klass* typedef anymore.
-class KlassHandle : public StackObj {
- Klass* _value;
- protected:
- Klass* obj() const { return _value; }
- Klass* non_null_obj() const { assert(_value != NULL, "resolving NULL _value"); return _value; }
-
- public:
- KlassHandle() : _value(NULL) {}
- KlassHandle(const Klass* obj) : _value(const_cast<Klass *>(obj)) {};
- KlassHandle(Thread* thread, const Klass* obj) : _value(const_cast<Klass *>(obj)) {};
-
- Klass* operator () () const { return obj(); }
- Klass* operator -> () const { return non_null_obj(); }
-
- bool operator == (Klass* o) const { return obj() == o; }
- bool operator == (const KlassHandle& h) const { return obj() == h.obj(); }
-
- bool is_null() const { return _value == NULL; }
- bool not_null() const { return _value != NULL; }
-};
-
-class instanceKlassHandle : public KlassHandle {
- public:
- /* Constructors */
- instanceKlassHandle () : KlassHandle() {}
- instanceKlassHandle (const Klass* k) : KlassHandle(k) {
- assert(k == NULL || is_instanceKlass(k), "illegal type");
- }
- instanceKlassHandle (Thread* thread, const Klass* k) : KlassHandle(thread, k) {
- assert(k == NULL || is_instanceKlass(k), "illegal type");
- }
- /* Access to klass part */
- InstanceKlass* operator () () const { return (InstanceKlass*)obj(); }
- InstanceKlass* operator -> () const { return (InstanceKlass*)obj(); }
-
- debug_only(bool is_instanceKlass(const Klass* k));
-};
-
-
//------------------------------------------------------------------------------------------------------------------------
// Thread local handle area
class HandleArea: public Arena {
--- a/hotspot/src/share/vm/runtime/handles.inline.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/handles.inline.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -40,7 +40,7 @@
}
}
-// Constructors for metadata handles
+// Constructor for metadata handles
#define DEF_METADATA_HANDLE_FN(name, type) \
inline name##Handle::name##Handle(type* obj) : _value(obj), _thread(NULL) { \
if (obj != NULL) { \
--- a/hotspot/src/share/vm/runtime/javaCalls.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/javaCalls.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -179,10 +179,10 @@
// ============ Virtual calls ============
-void JavaCalls::call_virtual(JavaValue* result, KlassHandle spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) {
+void JavaCalls::call_virtual(JavaValue* result, Klass* spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) {
CallInfo callinfo;
Handle receiver = args->receiver();
- KlassHandle recvrKlass(THREAD, receiver.is_null() ? (Klass*)NULL : receiver->klass());
+ Klass* recvrKlass = receiver.is_null() ? (Klass*)NULL : receiver->klass();
LinkInfo link_info(spec_klass, name, signature);
LinkResolver::resolve_virtual_call(
callinfo, receiver, recvrKlass, link_info, true, CHECK);
@@ -194,13 +194,13 @@
}
-void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, TRAPS) {
+void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, TRAPS) {
JavaCallArguments args(receiver); // One oop argument
call_virtual(result, spec_klass, name, signature, &args, CHECK);
}
-void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
+void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
JavaCallArguments args(receiver); // One oop argument
args.push_oop(arg1);
call_virtual(result, spec_klass, name, signature, &args, CHECK);
@@ -208,7 +208,7 @@
-void JavaCalls::call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
+void JavaCalls::call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
JavaCallArguments args(receiver); // One oop argument
args.push_oop(arg1);
args.push_oop(arg2);
@@ -218,7 +218,7 @@
// ============ Special calls ============
-void JavaCalls::call_special(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) {
+void JavaCalls::call_special(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) {
CallInfo callinfo;
LinkInfo link_info(klass, name, signature);
LinkResolver::resolve_special_call(callinfo, link_info, CHECK);
@@ -230,20 +230,20 @@
}
-void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) {
+void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, TRAPS) {
JavaCallArguments args(receiver); // One oop argument
call_special(result, klass, name, signature, &args, CHECK);
}
-void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
+void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
JavaCallArguments args(receiver); // One oop argument
args.push_oop(arg1);
call_special(result, klass, name, signature, &args, CHECK);
}
-void JavaCalls::call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
+void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
JavaCallArguments args(receiver); // One oop argument
args.push_oop(arg1);
args.push_oop(arg2);
@@ -253,7 +253,7 @@
// ============ Static calls ============
-void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) {
+void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) {
CallInfo callinfo;
LinkInfo link_info(klass, name, signature);
LinkResolver::resolve_static_call(callinfo, link_info, true, CHECK);
@@ -265,19 +265,19 @@
}
-void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) {
+void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, TRAPS) {
JavaCallArguments args; // No argument
call_static(result, klass, name, signature, &args, CHECK);
}
-void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
+void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS) {
JavaCallArguments args(arg1); // One oop argument
call_static(result, klass, name, signature, &args, CHECK);
}
-void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
+void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS) {
JavaCallArguments args; // One oop argument
args.push_oop(arg1);
args.push_oop(arg2);
@@ -285,7 +285,7 @@
}
-void JavaCalls::call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS) {
+void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS) {
JavaCallArguments args; // One oop argument
args.push_oop(arg1);
args.push_oop(arg2);
--- a/hotspot/src/share/vm/runtime/javaCalls.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/javaCalls.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -187,30 +187,30 @@
// call_special
// ------------
// The receiver must be first oop in argument list
- static void call_special(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS);
+ static void call_special(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS);
- static void call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS); // No args
- static void call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
- static void call_special(JavaValue* result, Handle receiver, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
+ static void call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, TRAPS); // No args
+ static void call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
+ static void call_special(JavaValue* result, Handle receiver, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
// virtual call
// ------------
// The receiver must be first oop in argument list
- static void call_virtual(JavaValue* result, KlassHandle spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS);
+ static void call_virtual(JavaValue* result, Klass* spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS);
- static void call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, TRAPS); // No args
- static void call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
- static void call_virtual(JavaValue* result, Handle receiver, KlassHandle spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
+ static void call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, TRAPS); // No args
+ static void call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
+ static void call_virtual(JavaValue* result, Handle receiver, Klass* spec_klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
// Static call
// -----------
- static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS);
+ static void call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS);
- static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS);
- static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
- static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
- static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS);
+ static void call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, TRAPS);
+ static void call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS);
+ static void call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS);
+ static void call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, Handle arg3, TRAPS);
// Low-level interface
static void call(JavaValue* result, const methodHandle& method, JavaCallArguments* args, TRAPS);
--- a/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -150,13 +150,13 @@
return result;
}
- static jfieldID to_jfieldID(instanceKlassHandle k, int offset, bool is_static) {
+ static jfieldID to_jfieldID(InstanceKlass* k, int offset, bool is_static) {
if (is_static) {
JNIid *id = k->jni_id_for(offset);
debug_only(id->set_is_static_field_id());
return jfieldIDWorkaround::to_static_jfieldID(id);
} else {
- return jfieldIDWorkaround::to_instance_jfieldID(k(), offset);
+ return jfieldIDWorkaround::to_instance_jfieldID(k, offset);
}
}
};
--- a/hotspot/src/share/vm/runtime/os.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/os.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -291,9 +291,8 @@
default: {
// Dispatch the signal to java
HandleMark hm(THREAD);
- Klass* k = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_misc_Signal(), THREAD);
- KlassHandle klass (THREAD, k);
- if (klass.not_null()) {
+ Klass* klass = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_misc_Signal(), THREAD);
+ if (klass != NULL) {
JavaValue result(T_VOID);
JavaCallArguments args;
args.push_int(sig);
@@ -352,8 +351,8 @@
if (!ReduceSignalUsage) {
// Setup JavaThread for processing signals
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
- instanceKlassHandle klass (THREAD, k);
- instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ instanceHandle thread_oop = ik->allocate_instance_handle(CHECK);
const char thread_name[] = "Signal Dispatcher";
Handle string = java_lang_String::create_from_str(thread_name, CHECK);
@@ -362,14 +361,14 @@
Handle thread_group (THREAD, Universe::system_thread_group());
JavaValue result(T_VOID);
JavaCalls::call_special(&result, thread_oop,
- klass,
+ ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group,
string,
CHECK);
- KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
+ Klass* group = SystemDictionary::ThreadGroup_klass();
JavaCalls::call_special(&result,
thread_group,
group,
--- a/hotspot/src/share/vm/runtime/reflection.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/reflection.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -708,7 +708,7 @@
// If inner_is_member, require the inner to be a member of the outer.
// If !inner_is_member, require the inner to be anonymous (a non-member).
// Caller is responsible for figuring out in advance which case must be true.
-void Reflection::check_for_inner_class(instanceKlassHandle outer, instanceKlassHandle inner,
+void Reflection::check_for_inner_class(const InstanceKlass* outer, const InstanceKlass* inner,
bool inner_is_member, TRAPS) {
InnerClassesIterator iter(outer);
constantPoolHandle cp (THREAD, outer->constants());
@@ -718,9 +718,9 @@
if (inner_is_member && ioff != 0 && ooff != 0) {
Klass* o = cp->klass_at(ooff, CHECK);
- if (o == outer()) {
+ if (o == outer) {
Klass* i = cp->klass_at(ioff, CHECK);
- if (i == inner()) {
+ if (i == inner) {
return;
}
}
@@ -728,7 +728,7 @@
if (!inner_is_member && ioff != 0 && ooff == 0 &&
cp->klass_name_at_matches(inner, ioff)) {
Klass* i = cp->klass_at(ioff, CHECK);
- if (i == inner()) {
+ if (i == inner) {
return;
}
}
@@ -802,7 +802,7 @@
return method->resolved_checked_exceptions(THREAD);
}
-static Handle new_type(Symbol* signature, KlassHandle k, TRAPS) {
+static Handle new_type(Symbol* signature, Klass* k, TRAPS) {
// Basic types
BasicType type = vmSymbols::signature_type(signature);
if (type != T_OBJECT) {
@@ -829,7 +829,7 @@
assert(!method()->is_initializer() ||
(for_constant_pool_access && method()->is_static()),
"should call new_constructor instead");
- instanceKlassHandle holder (THREAD, method->method_holder());
+ InstanceKlass* holder = method->method_holder();
int slot = method->method_idnum();
Symbol* signature = method->signature();
@@ -890,7 +890,7 @@
oop Reflection::new_constructor(const methodHandle& method, TRAPS) {
assert(method()->is_initializer(), "should call new_method instead");
- instanceKlassHandle holder (THREAD, method->method_holder());
+ InstanceKlass* holder = method->method_holder();
int slot = method->method_idnum();
Symbol* signature = method->signature();
@@ -938,7 +938,7 @@
oop name_oop = StringTable::intern(field_name, CHECK_NULL);
Handle name = Handle(THREAD, name_oop);
Symbol* signature = fd->signature();
- instanceKlassHandle holder (THREAD, fd->field_holder());
+ InstanceKlass* holder = fd->field_holder();
Handle type = new_type(signature, holder, CHECK_NULL);
Handle rh = java_lang_reflect_Field::create(CHECK_NULL);
@@ -985,9 +985,9 @@
}
-static methodHandle resolve_interface_call(instanceKlassHandle klass,
+static methodHandle resolve_interface_call(InstanceKlass* klass,
const methodHandle& method,
- KlassHandle recv_klass,
+ Klass* recv_klass,
Handle receiver,
TRAPS) {
@@ -1035,7 +1035,7 @@
// Method call (shared by invoke_method and invoke_constructor)
-static oop invoke(instanceKlassHandle klass,
+static oop invoke(InstanceKlass* klass,
methodHandle reflected_method,
Handle receiver,
bool override,
@@ -1048,7 +1048,7 @@
ResourceMark rm(THREAD);
methodHandle method; // actual method to invoke
- KlassHandle target_klass; // target klass, receiver's klass for non-static
+ Klass* target_klass; // target klass, receiver's klass for non-static
// Ensure klass is initialized
klass->initialize(CHECK_NULL);
@@ -1064,11 +1064,11 @@
THROW_0(vmSymbols::java_lang_NullPointerException());
}
// Check class of receiver against class declaring method
- if (!receiver->is_a(klass())) {
+ if (!receiver->is_a(klass)) {
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "object is not an instance of declaring class");
}
// target klass is receiver's klass
- target_klass = KlassHandle(THREAD, receiver->klass());
+ target_klass = receiver->klass();
// no need to resolve if method is private or <init>
if (reflected_method->is_private() || reflected_method->name() == vmSymbols::object_initializer_name()) {
method = reflected_method;
@@ -1109,7 +1109,7 @@
ResourceMark rm(THREAD);
Handle h_origexception = Exceptions::new_exception(THREAD,
vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(target_klass(),
+ Method::name_and_sig_as_C_string(target_klass,
method->name(),
method->signature()));
JavaCallArguments args(h_origexception);
@@ -1127,7 +1127,7 @@
if (method.is_null()) {
ResourceMark rm(THREAD);
THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(),
- Method::name_and_sig_as_C_string(klass(),
+ Method::name_and_sig_as_C_string(klass,
reflected_method->name(),
reflected_method->signature()));
}
@@ -1229,7 +1229,7 @@
rtype = T_OBJECT;
}
- instanceKlassHandle klass(THREAD, java_lang_Class::as_Klass(mirror));
+ InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
Method* m = klass->method_with_idnum(slot);
if (m == NULL) {
THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke");
@@ -1246,7 +1246,7 @@
bool override = java_lang_reflect_Constructor::override(constructor_mirror) != 0;
objArrayHandle ptypes(THREAD, objArrayOop(java_lang_reflect_Constructor::parameter_types(constructor_mirror)));
- instanceKlassHandle klass(THREAD, java_lang_Class::as_Klass(mirror));
+ InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
Method* m = klass->method_with_idnum(slot);
if (m == NULL) {
THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke");
--- a/hotspot/src/share/vm/runtime/reflection.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/reflection.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -103,8 +103,8 @@
// If inner_is_member, require the inner to be a member of the outer.
// If !inner_is_member, require the inner to be anonymous (a non-member).
// Caller is responsible for figuring out in advance which case must be true.
- static void check_for_inner_class(instanceKlassHandle outer,
- instanceKlassHandle inner,
+ static void check_for_inner_class(const InstanceKlass* outer,
+ const InstanceKlass* inner,
bool inner_is_member,
TRAPS);
--- a/hotspot/src/share/vm/runtime/reflectionUtils.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/reflectionUtils.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -27,7 +27,7 @@
#include "memory/universe.inline.hpp"
#include "runtime/reflectionUtils.hpp"
-KlassStream::KlassStream(instanceKlassHandle klass, bool local_only,
+KlassStream::KlassStream(InstanceKlass* klass, bool local_only,
bool classes_only, bool walk_defaults) {
_klass = _base_klass = klass;
_base_class_search_defaults = false;
@@ -48,7 +48,7 @@
if (_local_only) return true;
if (!_klass->is_interface() && _klass->super() != NULL) {
// go up superclass chain (not for interfaces)
- _klass = _klass->super();
+ _klass = InstanceKlass::cast(_klass->super());
// Next for method walks, walk default methods
} else if (_walk_defaults && (_defaults_checked == false) && (_base_klass->default_methods() != NULL)) {
_base_class_search_defaults = true;
@@ -57,7 +57,7 @@
} else {
// Next walk transitive interfaces
if (_interface_index > 0) {
- _klass = _interfaces->at(--_interface_index);
+ _klass = InstanceKlass::cast(_interfaces->at(--_interface_index));
} else {
return true;
}
--- a/hotspot/src/share/vm/runtime/reflectionUtils.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/reflectionUtils.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -45,8 +45,8 @@
class KlassStream VALUE_OBJ_CLASS_SPEC {
protected:
- instanceKlassHandle _klass; // current klass/interface iterated over
- instanceKlassHandle _base_klass; // initial klass/interface to iterate over
+ InstanceKlass* _klass; // current klass/interface iterated over
+ InstanceKlass* _base_klass; // initial klass/interface to iterate over
Array<Klass*>* _interfaces; // transitive interfaces for initial class
int _interface_index; // current interface being processed
bool _local_only; // process initial class/interface only
@@ -60,7 +60,7 @@
public:
// constructor
- KlassStream(instanceKlassHandle klass, bool local_only, bool classes_only, bool walk_defaults);
+ KlassStream(InstanceKlass* klass, bool local_only, bool classes_only, bool walk_defaults);
// testing
bool eos();
@@ -69,7 +69,7 @@
virtual void next() = 0;
// accessors
- instanceKlassHandle klass() const { return _klass; }
+ InstanceKlass* klass() const { return _klass; }
int index() const { return _index; }
bool base_class_search_defaults() const { return _base_class_search_defaults; }
void base_class_search_defaults(bool b) { _base_class_search_defaults = b; }
@@ -97,7 +97,7 @@
}
}
public:
- MethodStream(instanceKlassHandle klass, bool local_only, bool classes_only)
+ MethodStream(InstanceKlass* klass, bool local_only, bool classes_only)
: KlassStream(klass, local_only, classes_only, true) {
_index = length();
next();
@@ -125,7 +125,7 @@
fieldDescriptor _fd_buf;
public:
- FieldStream(instanceKlassHandle klass, bool local_only, bool classes_only)
+ FieldStream(InstanceKlass* klass, bool local_only, bool classes_only)
: KlassStream(klass, local_only, classes_only, false) {
_index = length();
next();
@@ -152,7 +152,7 @@
// bridge to a heavier API:
fieldDescriptor& field_descriptor() const {
fieldDescriptor& field = const_cast<fieldDescriptor&>(_fd_buf);
- field.reinitialize(_klass(), _index);
+ field.reinitialize(_klass, _index);
return field;
}
};
@@ -222,15 +222,15 @@
bool has_filtered_field() { return (_filtered_fields_count > 0); }
public:
- FilteredFieldStream(instanceKlassHandle klass, bool local_only, bool classes_only)
+ FilteredFieldStream(InstanceKlass* klass, bool local_only, bool classes_only)
: FieldStream(klass, local_only, classes_only) {
- _filtered_fields_count = FilteredFieldsMap::filtered_fields_count((Klass*)klass(), local_only);
+ _filtered_fields_count = FilteredFieldsMap::filtered_fields_count(klass, local_only);
}
int field_count();
void next() {
_index -= 1;
if (has_filtered_field()) {
- while (_index >=0 && FilteredFieldsMap::is_filtered_field((Klass*)_klass(), offset())) {
+ while (_index >=0 && FilteredFieldsMap::is_filtered_field((Klass*)_klass, offset())) {
_index -= 1;
}
}
--- a/hotspot/src/share/vm/runtime/serviceThread.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/serviceThread.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, 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
@@ -40,7 +40,7 @@
void ServiceThread::initialize() {
EXCEPTION_MARK;
- instanceKlassHandle klass (THREAD, SystemDictionary::Thread_klass());
+ InstanceKlass* klass = SystemDictionary::Thread_klass();
instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
const char* name = "Service Thread";
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -675,7 +675,7 @@
do {
bool skip_scope_increment = false;
// exception handler lookup
- KlassHandle ek (THREAD, exception->klass());
+ Klass* ek = exception->klass();
methodHandle mh(THREAD, sd->method());
handler_bci = Method::fast_exception_handler_bci_for(mh, ek, bci, THREAD);
if (HAS_PENDING_EXCEPTION) {
@@ -1185,7 +1185,7 @@
// Check that the receiver klass is of the right subtype and that it is initialized for virtual calls
if (has_receiver) {
assert(receiver.not_null(), "should have thrown exception");
- KlassHandle receiver_klass(THREAD, receiver->klass());
+ Klass* receiver_klass = receiver->klass();
Klass* rk = NULL;
if (attached_method.not_null()) {
// In case there's resolved method attached, use its holder during the check.
@@ -1195,16 +1195,16 @@
constantPoolHandle constants(THREAD, caller->constants());
rk = constants->klass_ref_at(bytecode_index, CHECK_NH);
}
- KlassHandle static_receiver_klass(THREAD, rk);
+ Klass* static_receiver_klass = rk;
methodHandle callee = callinfo.selected_method();
- assert(receiver_klass->is_subtype_of(static_receiver_klass()),
+ assert(receiver_klass->is_subtype_of(static_receiver_klass),
"actual receiver must be subclass of static receiver klass");
if (receiver_klass->is_instance_klass()) {
- if (InstanceKlass::cast(receiver_klass())->is_not_initialized()) {
+ if (InstanceKlass::cast(receiver_klass)->is_not_initialized()) {
tty->print_cr("ERROR: Klass not yet initialized!!");
- receiver_klass()->print();
+ receiver_klass->print();
}
- assert(!InstanceKlass::cast(receiver_klass())->is_not_initialized(), "receiver_klass must be initialized");
+ assert(!InstanceKlass::cast(receiver_klass)->is_not_initialized(), "receiver_klass must be initialized");
}
}
#endif
@@ -1363,8 +1363,8 @@
if (is_virtual) {
assert(receiver.not_null() || invoke_code == Bytecodes::_invokehandle, "sanity check");
bool static_bound = call_info.resolved_method()->can_be_statically_bound();
- KlassHandle h_klass(THREAD, invoke_code == Bytecodes::_invokehandle ? NULL : receiver->klass());
- CompiledIC::compute_monomorphic_entry(callee_method, h_klass,
+ Klass* klass = invoke_code == Bytecodes::_invokehandle ? NULL : receiver->klass();
+ CompiledIC::compute_monomorphic_entry(callee_method, klass,
is_optimized, static_bound, is_nmethod, virtual_call_info,
CHECK_(methodHandle()));
} else {
@@ -1625,7 +1625,7 @@
// and now we have (or had) a compiled entry. We correct the IC
// by using a new icBuffer.
CompiledICInfo info;
- KlassHandle receiver_klass(THREAD, receiver()->klass());
+ Klass* receiver_klass = receiver()->klass();
inline_cache->compute_monomorphic_entry(callee_method,
receiver_klass,
inline_cache->is_optimized(),
--- a/hotspot/src/share/vm/runtime/statSampler.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/statSampler.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, 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
@@ -187,7 +187,7 @@
// public static String getProperty(String key, String def);
JavaCalls::call_static(&result,
- KlassHandle(THREAD, SystemDictionary::System_klass()),
+ SystemDictionary::System_klass(),
vmSymbols::getProperty_name(),
vmSymbols::string_string_signature(),
key_str,
--- a/hotspot/src/share/vm/runtime/thread.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/thread.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -950,27 +950,27 @@
// Creates the initial ThreadGroup
static Handle create_initial_thread_group(TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH);
- instanceKlassHandle klass (THREAD, k);
-
- Handle system_instance = klass->allocate_instance_handle(CHECK_NH);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+
+ Handle system_instance = ik->allocate_instance_handle(CHECK_NH);
{
JavaValue result(T_VOID);
JavaCalls::call_special(&result,
system_instance,
- klass,
+ ik,
vmSymbols::object_initializer_name(),
vmSymbols::void_method_signature(),
CHECK_NH);
}
Universe::set_system_thread_group(system_instance());
- Handle main_instance = klass->allocate_instance_handle(CHECK_NH);
+ Handle main_instance = ik->allocate_instance_handle(CHECK_NH);
{
JavaValue result(T_VOID);
Handle string = java_lang_String::create_from_str("main", CHECK_NH);
JavaCalls::call_special(&result,
main_instance,
- klass,
+ ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
system_instance,
@@ -984,8 +984,8 @@
static oop create_initial_thread(Handle thread_group, JavaThread* thread,
TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL);
- instanceKlassHandle klass (THREAD, k);
- instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ instanceHandle thread_oop = ik->allocate_instance_handle(CHECK_NULL);
java_lang_Thread::set_thread(thread_oop(), thread);
java_lang_Thread::set_priority(thread_oop(), NormPriority);
@@ -995,7 +995,7 @@
JavaValue result(T_VOID);
JavaCalls::call_special(&result, thread_oop,
- klass,
+ ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group,
@@ -1054,9 +1054,8 @@
// General purpose hook into Java code, run once when the VM is initialized.
// The Java library method itself may be changed independently from the VM.
static void call_postVMInitHook(TRAPS) {
- Klass* k = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_vm_PostVMInitHook(), THREAD);
- instanceKlassHandle klass (THREAD, k);
- if (klass.not_null()) {
+ Klass* klass = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_vm_PostVMInitHook(), THREAD);
+ if (klass != NULL) {
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
vmSymbols::void_method_signature(),
@@ -1070,8 +1069,7 @@
const char *vm_info = VM_Version::vm_info_string();
// java.lang.System class
- Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
- instanceKlassHandle klass (THREAD, k);
+ Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
// setProperty arguments
Handle key_str = java_lang_String::create_from_str("java.vm.info", CHECK);
@@ -1097,8 +1095,8 @@
assert(threadObj() == NULL, "should only create Java thread object once");
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
- instanceKlassHandle klass (THREAD, k);
- instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
+ InstanceKlass* ik = InstanceKlass::cast(k);
+ instanceHandle thread_oop = ik->allocate_instance_handle(CHECK);
java_lang_Thread::set_thread(thread_oop(), this);
java_lang_Thread::set_priority(thread_oop(), NormPriority);
@@ -1110,7 +1108,7 @@
// Thread gets assigned specified name and null target
JavaCalls::call_special(&result,
thread_oop,
- klass,
+ ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_string_void_signature(),
thread_group, // Argument 1
@@ -1121,7 +1119,7 @@
// (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
JavaCalls::call_special(&result,
thread_oop,
- klass,
+ ik,
vmSymbols::object_initializer_name(),
vmSymbols::threadgroup_runnable_void_signature(),
thread_group, // Argument 1
@@ -1138,7 +1136,7 @@
return;
}
- KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
+ Klass* group = SystemDictionary::ThreadGroup_klass();
Handle threadObj(THREAD, this->threadObj());
JavaCalls::call_special(&result,
@@ -1779,7 +1777,7 @@
if (uncaught_exception.not_null()) {
EXCEPTION_MARK;
// Call method Thread.dispatchUncaughtException().
- KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
+ Klass* thread_klass = SystemDictionary::Thread_klass();
JavaValue result(T_VOID);
JavaCalls::call_virtual(&result,
threadObj, thread_klass,
@@ -1817,7 +1815,7 @@
while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
EXCEPTION_MARK;
JavaValue result(T_VOID);
- KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
+ Klass* thread_klass = SystemDictionary::Thread_klass();
JavaCalls::call_virtual(&result,
threadObj, thread_klass,
vmSymbols::exit_method_name(),
@@ -3388,9 +3386,7 @@
// fields in, out, and err. Set up java signal handlers, OS-specific
// system settings, and thread group of the main thread.
static void call_initPhase1(TRAPS) {
- Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
- instanceKlassHandle klass (THREAD, k);
-
+ Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase1_name(),
vmSymbols::void_method_signature(), CHECK);
@@ -3410,8 +3406,7 @@
static void call_initPhase2(TRAPS) {
TraceTime timer("Phase2 initialization", TRACETIME_LOG(Info, modules, startuptime));
- Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
- instanceKlassHandle klass (THREAD, k);
+ Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(),
@@ -3426,9 +3421,7 @@
// and system class loader may be a custom class loaded from -Xbootclasspath/a,
// other modules or the application's classpath.
static void call_initPhase3(TRAPS) {
- Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
- instanceKlassHandle klass (THREAD, k);
-
+ Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(),
vmSymbols::void_method_signature(), CHECK);
@@ -4064,10 +4057,10 @@
}
EXCEPTION_MARK;
- Klass* k =
+ Klass* shutdown_klass =
SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
THREAD);
- if (k != NULL) {
+ if (shutdown_klass != NULL) {
// SystemDictionary::resolve_or_null will return null if there was
// an exception. If we cannot load the Shutdown class, just don't
// call Shutdown.shutdown() at all. This will mean the shutdown hooks
@@ -4075,7 +4068,6 @@
// Note that if a shutdown hook was registered or runFinalizersOnExit
// was called, the Shutdown class would have already been loaded
// (Runtime.addShutdownHook and runFinalizersOnExit will load it).
- instanceKlassHandle shutdown_klass (THREAD, k);
JavaValue result(T_VOID);
JavaCalls::call_static(&result,
shutdown_klass,
--- a/hotspot/src/share/vm/runtime/vframe.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/vframe.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -521,14 +521,14 @@
int method_prefix_count = 0;
char** method_prefixes = JvmtiExport::get_all_native_method_prefixes(&method_prefix_count);
- KlassHandle prefixed_klass(method()->method_holder());
+ Klass* prefixed_klass = method()->method_holder();
const char* prefixed_name = method()->name()->as_C_string();
size_t prefixed_name_len = strlen(prefixed_name);
int prefix_index = method_prefix_count-1;
while (!at_end()) {
next();
- if (method()->method_holder() != prefixed_klass()) {
+ if (method()->method_holder() != prefixed_klass) {
break; // classes don't match, can't be a wrapper
}
const char* name = method()->name()->as_C_string();
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -194,9 +194,9 @@
typedef Hashtable<Symbol*, mtSymbol> SymbolHashtable;
typedef HashtableEntry<Symbol*, mtClass> SymbolHashtableEntry;
typedef Hashtable<oop, mtSymbol> StringHashtable;
-typedef TwoOopHashtable<Klass*, mtClass> KlassTwoOopHashtable;
-typedef Hashtable<Klass*, mtClass> KlassHashtable;
-typedef HashtableEntry<Klass*, mtClass> KlassHashtableEntry;
+typedef TwoOopHashtable<InstanceKlass*, mtClass> KlassTwoOopHashtable;
+typedef Hashtable<InstanceKlass*, mtClass> KlassHashtable;
+typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
typedef TwoOopHashtable<Symbol*, mtClass> SymbolTwoOopHashtable;
typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
--- a/hotspot/src/share/vm/runtime/vm_operations.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/runtime/vm_operations.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -292,7 +292,7 @@
#ifndef PRODUCT
class VM_DeoptimizeAll: public VM_Operation {
private:
- KlassHandle _dependee;
+ Klass* _dependee;
public:
VM_DeoptimizeAll() {}
VMOp_Type type() const { return VMOp_DeoptimizeAll; }
--- a/hotspot/src/share/vm/services/attachListener.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/attachListener.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -46,13 +46,13 @@
// Invokes VMSupport.serializePropertiesToByteArray to serialize
// the system properties into a byte array.
-static Klass* load_and_initialize_klass(Symbol* sh, TRAPS) {
+static InstanceKlass* load_and_initialize_klass(Symbol* sh, TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
if (ik->should_be_initialized()) {
ik->initialize(CHECK_NULL);
}
- return ik();
+ return ik;
}
static jint get_properties(AttachOperation* op, outputStream* out, Symbol* serializePropertiesMethod) {
@@ -61,13 +61,12 @@
// load VMSupport
Symbol* klass = vmSymbols::jdk_internal_vm_VMSupport();
- Klass* k = load_and_initialize_klass(klass, THREAD);
+ InstanceKlass* k = load_and_initialize_klass(klass, THREAD);
if (HAS_PENDING_EXCEPTION) {
java_lang_Throwable::print(PENDING_EXCEPTION, out);
CLEAR_PENDING_EXCEPTION;
return JNI_ERR;
}
- instanceKlassHandle ik(THREAD, k);
// invoke the serializePropertiesToByteArray method
JavaValue result(T_OBJECT);
@@ -76,11 +75,11 @@
Symbol* signature = vmSymbols::serializePropertiesToByteArray_signature();
JavaCalls::call_static(&result,
- ik,
- serializePropertiesMethod,
- signature,
- &args,
- THREAD);
+ k,
+ serializePropertiesMethod,
+ signature,
+ &args,
+ THREAD);
if (HAS_PENDING_EXCEPTION) {
java_lang_Throwable::print(PENDING_EXCEPTION, out);
CLEAR_PENDING_EXCEPTION;
@@ -374,7 +373,7 @@
return;
}
- instanceKlassHandle klass (THREAD, k);
+ InstanceKlass* klass = InstanceKlass::cast(k);
instanceHandle thread_oop = klass->allocate_instance_handle(THREAD);
if (has_init_error(THREAD)) {
return;
@@ -401,7 +400,7 @@
return;
}
- KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
+ Klass* group = SystemDictionary::ThreadGroup_klass();
JavaCalls::call_special(&result,
thread_group,
group,
--- a/hotspot/src/share/vm/services/classLoadingService.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/classLoadingService.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -197,24 +197,21 @@
LogConfiguration::configure_stdout(level, false, LOG_TAGS(class, unload));
}
-GrowableArray<KlassHandle>* LoadedClassesEnumerator::_loaded_classes = NULL;
-Thread* LoadedClassesEnumerator::_current_thread = NULL;
+GrowableArray<Klass*>* LoadedClassesEnumerator::_loaded_classes = NULL;
-LoadedClassesEnumerator::LoadedClassesEnumerator(Thread* cur_thread) {
- assert(cur_thread == Thread::current(), "Check current thread");
+LoadedClassesEnumerator::LoadedClassesEnumerator() {
int init_size = ClassLoadingService::loaded_class_count();
- _klass_handle_array = new GrowableArray<KlassHandle>(init_size);
+ _klass_array = new GrowableArray<Klass*>(init_size);
// For consistency of the loaded classes, grab the SystemDictionary lock
MutexLocker sd_mutex(SystemDictionary_lock);
- // Set _loaded_classes and _current_thread and begin enumerating all classes.
+ // Set _loaded_classes and begin enumerating all classes.
// Only one thread will do the enumeration at a time.
// These static variables are needed and they are used by the static method
// add_loaded_class called from classes_do().
- _loaded_classes = _klass_handle_array;
- _current_thread = cur_thread;
+ _loaded_classes = _klass_array;
SystemDictionary::classes_do(&add_loaded_class);
--- a/hotspot/src/share/vm/services/classLoadingService.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/classLoadingService.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -120,17 +120,14 @@
// FIXME: make this piece of code to be shared by M&M and JVMTI
class LoadedClassesEnumerator : public StackObj {
private:
- static GrowableArray<KlassHandle>* _loaded_classes;
- // _current_thread is for creating a KlassHandle with a faster version constructor
- static Thread* _current_thread;
-
- GrowableArray<KlassHandle>* _klass_handle_array;
+ static GrowableArray<Klass*>* _loaded_classes;
+ GrowableArray<Klass*>* _klass_array;
public:
- LoadedClassesEnumerator(Thread* cur_thread);
+ LoadedClassesEnumerator();
- int num_loaded_classes() { return _klass_handle_array->length(); }
- KlassHandle get_klass(int index) { return _klass_handle_array->at(index); }
+ int num_loaded_classes() { return _klass_array->length(); }
+ Klass* get_klass(int index) { return _klass_array->at(index); }
static void add_loaded_class(Klass* k) {
// FIXME: For now - don't include array klasses
@@ -138,11 +135,9 @@
// and also indirect creation of array of super class and secondaries
//
// for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
- // KlassHandle h(_current_thread, l);
- // _loaded_classes->append(h);
+ // _loaded_classes->append(l);
// }
- KlassHandle h(_current_thread, k);
- _loaded_classes->append(h);
+ _loaded_classes->append(k);
}
};
--- a/hotspot/src/share/vm/services/diagnosticCommand.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/diagnosticCommand.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -324,7 +324,7 @@
// load VMSupport
Symbol* klass = vmSymbols::jdk_internal_vm_VMSupport();
Klass* k = SystemDictionary::resolve_or_fail(klass, true, CHECK);
- instanceKlassHandle ik (THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
if (ik->should_be_initialized()) {
ik->initialize(THREAD);
}
@@ -405,9 +405,8 @@
void RunFinalizationDCmd::execute(DCmdSource source, TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(),
true, CHECK);
- instanceKlassHandle klass(THREAD, k);
JavaValue result(T_VOID);
- JavaCalls::call_static(&result, klass,
+ JavaCalls::call_static(&result, k,
vmSymbols::run_finalization_name(),
vmSymbols::void_method_signature(), CHECK);
}
@@ -423,13 +422,12 @@
Klass* k = SystemDictionary::resolve_or_fail(
vmSymbols::finalizer_histogram_klass(), true, CHECK);
- instanceKlassHandle klass(THREAD, k);
JavaValue result(T_ARRAY);
// We are calling lang.ref.FinalizerHistogram.getFinalizerHistogram() method
// and expect it to return array of FinalizerHistogramEntry as Object[]
- JavaCalls::call_static(&result, klass,
+ JavaCalls::call_static(&result, k,
vmSymbols::get_finalizer_histogram_name(),
vmSymbols::void_finalizer_histogram_entry_array_signature(), CHECK);
@@ -753,7 +751,6 @@
Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
- instanceKlassHandle ik (THREAD, k);
JavaValue result(T_VOID);
@@ -807,7 +804,7 @@
#undef PUT_OPTION
Handle str = java_lang_String::create_from_str(options.as_string(), CHECK);
- JavaCalls::call_static(&result, ik, vmSymbols::startRemoteAgent_name(), vmSymbols::string_void_signature(), str, CHECK);
+ JavaCalls::call_static(&result, k, vmSymbols::startRemoteAgent_name(), vmSymbols::string_void_signature(), str, CHECK);
}
JMXStartLocalDCmd::JMXStartLocalDCmd(outputStream *output, bool heap_allocated) :
@@ -826,10 +823,9 @@
Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
- instanceKlassHandle ik (THREAD, k);
JavaValue result(T_VOID);
- JavaCalls::call_static(&result, ik, vmSymbols::startLocalAgent_name(), vmSymbols::void_method_signature(), CHECK);
+ JavaCalls::call_static(&result, k, vmSymbols::startLocalAgent_name(), vmSymbols::void_method_signature(), CHECK);
}
void JMXStopRemoteDCmd::execute(DCmdSource source, TRAPS) {
@@ -843,10 +839,9 @@
Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
- instanceKlassHandle ik (THREAD, k);
JavaValue result(T_VOID);
- JavaCalls::call_static(&result, ik, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK);
+ JavaCalls::call_static(&result, k, vmSymbols::stopRemoteAgent_name(), vmSymbols::void_method_signature(), CHECK);
}
JMXStatusDCmd::JMXStatusDCmd(outputStream *output, bool heap_allocated) :
@@ -864,10 +859,9 @@
Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_internal_agent_Agent(), loader, Handle(), true, CHECK);
- instanceKlassHandle ik (THREAD, k);
JavaValue result(T_OBJECT);
- JavaCalls::call_static(&result, ik, vmSymbols::getAgentStatus_name(), vmSymbols::void_string_signature(), CHECK);
+ JavaCalls::call_static(&result, k, vmSymbols::getAgentStatus_name(), vmSymbols::void_string_signature(), CHECK);
jvalue* jv = (jvalue*) result.get_value_addr();
oop str = (oop) jv->l;
--- a/hotspot/src/share/vm/services/diagnosticFramework.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/diagnosticFramework.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, 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
@@ -457,7 +457,7 @@
if (notif) {
Klass* k = Management::com_sun_management_internal_DiagnosticCommandImpl_klass(CHECK);
- instanceKlassHandle dcmd_mbean_klass(THREAD, k);
+ InstanceKlass* dcmd_mbean_klass = InstanceKlass::cast(k);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,
--- a/hotspot/src/share/vm/services/gcNotifier.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/gcNotifier.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -79,8 +79,7 @@
static Handle getGcInfoBuilder(GCMemoryManager *gcManager,TRAPS) {
- Klass* k = Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(CHECK_NH);
- instanceKlassHandle gcMBeanKlass (THREAD, k);
+ Klass* gcMBeanKlass = Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(CHECK_NH);
instanceOop i = gcManager->get_memory_manager_instance(THREAD);
instanceHandle ih(THREAD, i);
@@ -102,16 +101,15 @@
// Fill the arrays of MemoryUsage objects with before and after GC
// per pool memory usage
- Klass* mu_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
- instanceKlassHandle mu_kh(THREAD, mu_klass);
+ InstanceKlass* mu_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
// The array allocations below should use a handle containing mu_klass
// as the first allocation could trigger a GC, causing the actual
// klass oop to move, and leaving mu_klass pointing to the old
// location.
- objArrayOop bu = oopFactory::new_objArray(mu_kh(), MemoryService::num_memory_pools(), CHECK_NH);
+ objArrayOop bu = oopFactory::new_objArray(mu_klass, MemoryService::num_memory_pools(), CHECK_NH);
objArrayHandle usage_before_gc_ah(THREAD, bu);
- objArrayOop au = oopFactory::new_objArray(mu_kh(), MemoryService::num_memory_pools(), CHECK_NH);
+ objArrayOop au = oopFactory::new_objArray(mu_klass, MemoryService::num_memory_pools(), CHECK_NH);
objArrayHandle usage_after_gc_ah(THREAD, au);
for (int i = 0; i < MemoryService::num_memory_pools(); i++) {
@@ -135,8 +133,7 @@
// The type is 'I'
objArrayOop extra_args_array = oopFactory::new_objArray(SystemDictionary::Integer_klass(), 1, CHECK_NH);
objArrayHandle extra_array (THREAD, extra_args_array);
- Klass* itKlass = SystemDictionary::Integer_klass();
- instanceKlassHandle intK(THREAD, itKlass);
+ InstanceKlass* intK = SystemDictionary::Integer_klass();
instanceHandle extra_arg_val = intK->allocate_instance_handle(CHECK_NH);
@@ -155,10 +152,9 @@
}
extra_array->obj_at_put(0,extra_arg_val());
- Klass* gcInfoklass = Management::com_sun_management_GcInfo_klass(CHECK_NH);
- instanceKlassHandle ik(THREAD, gcInfoklass);
+ InstanceKlass* gcInfoklass = Management::com_sun_management_GcInfo_klass(CHECK_NH);
- Handle gcInfo_instance = ik->allocate_instance_handle(CHECK_NH);
+ Handle gcInfo_instance = gcInfoklass->allocate_instance_handle(CHECK_NH);
JavaValue constructor_result(T_VOID);
JavaCallArguments constructor_args(16);
@@ -172,7 +168,7 @@
constructor_args.push_oop(extra_array);
JavaCalls::call_special(&constructor_result,
- ik,
+ gcInfoklass,
vmSymbols::object_initializer_name(),
vmSymbols::com_sun_management_GcInfo_constructor_signature(),
&constructor_args,
@@ -216,13 +212,11 @@
Handle objName = java_lang_String::create_from_str(request->gcManager->name(), CHECK);
Handle objAction = java_lang_String::create_from_str(request->gcAction, CHECK);
Handle objCause = java_lang_String::create_from_str(request->gcCause, CHECK);
- Klass* k = Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(CHECK);
-
- instanceKlassHandle gc_mbean_klass(THREAD, k);
+ InstanceKlass* gc_mbean_klass = Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(CHECK);
instanceOop gc_mbean = request->gcManager->get_memory_manager_instance(THREAD);
instanceHandle gc_mbean_h(THREAD, gc_mbean);
- if (!gc_mbean_h->is_a(k)) {
+ if (!gc_mbean_h->is_a(gc_mbean_klass)) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"This GCMemoryManager doesn't have a GarbageCollectorMXBean");
}
--- a/hotspot/src/share/vm/services/heapDumper.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/heapDumper.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -814,11 +814,11 @@
// returns the size of the instance of the given class
u4 DumperSupport::instance_size(Klass* k) {
HandleMark hm;
- instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
u4 size = 0;
- for (FieldStream fld(ikh, false, false); !fld.eos(); fld.next()) {
+ for (FieldStream fld(ik, false, false); !fld.eos(); fld.next()) {
if (!fld.access_flags().is_static()) {
Symbol* sig = fld.signature();
switch (sig->byte_at(0)) {
@@ -847,18 +847,18 @@
// dumps static fields of the given class
void DumperSupport::dump_static_fields(DumpWriter* writer, Klass* k) {
HandleMark hm;
- instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// pass 1 - count the static fields
u2 field_count = 0;
- for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) {
+ for (FieldStream fldc(ik, true, true); !fldc.eos(); fldc.next()) {
if (fldc.access_flags().is_static()) field_count++;
}
writer->write_u2(field_count);
// pass 2 - dump the field descriptors and raw values
- for (FieldStream fld(ikh, true, true); !fld.eos(); fld.next()) {
+ for (FieldStream fld(ik, true, true); !fld.eos(); fld.next()) {
if (fld.access_flags().is_static()) {
Symbol* sig = fld.signature();
@@ -867,7 +867,7 @@
// value
int offset = fld.offset();
- address addr = (address)ikh->java_mirror() + offset;
+ address addr = (address)ik->java_mirror() + offset;
dump_field_value(writer, sig->byte_at(0), addr);
}
@@ -877,9 +877,9 @@
// dump the raw values of the instance fields of the given object
void DumperSupport::dump_instance_fields(DumpWriter* writer, oop o) {
HandleMark hm;
- instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), o->klass());
+ InstanceKlass* ik = InstanceKlass::cast(o->klass());
- for (FieldStream fld(ikh, false, false); !fld.eos(); fld.next()) {
+ for (FieldStream fld(ik, false, false); !fld.eos(); fld.next()) {
if (!fld.access_flags().is_static()) {
Symbol* sig = fld.signature();
address addr = (address)o + fld.offset();
@@ -892,18 +892,18 @@
// dumps the definition of the instance fields for a given class
void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, Klass* k) {
HandleMark hm;
- instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
// pass 1 - count the instance fields
u2 field_count = 0;
- for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) {
+ for (FieldStream fldc(ik, true, true); !fldc.eos(); fldc.next()) {
if (!fldc.access_flags().is_static()) field_count++;
}
writer->write_u2(field_count);
// pass 2 - dump the field descriptors
- for (FieldStream fld(ikh, true, true); !fld.eos(); fld.next()) {
+ for (FieldStream fld(ik, true, true); !fld.eos(); fld.next()) {
if (!fld.access_flags().is_static()) {
Symbol* sig = fld.signature();
--- a/hotspot/src/share/vm/services/lowMemoryDetector.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/lowMemoryDetector.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -293,8 +293,7 @@
void SensorInfo::trigger(int count, TRAPS) {
assert(count <= _pending_trigger_count, "just checking");
if (_sensor_obj != NULL) {
- Klass* k = Management::sun_management_Sensor_klass(CHECK);
- instanceKlassHandle sensorKlass (THREAD, k);
+ InstanceKlass* sensorKlass = Management::sun_management_Sensor_klass(CHECK);
Handle sensor_h(THREAD, _sensor_obj);
Handle usage_h = MemoryService::create_MemoryUsage_obj(_usage, CHECK);
@@ -337,8 +336,7 @@
}
if (_sensor_obj != NULL) {
- Klass* k = Management::sun_management_Sensor_klass(CHECK);
- instanceKlassHandle sensorKlass (THREAD, k);
+ InstanceKlass* sensorKlass = Management::sun_management_Sensor_klass(CHECK);
Handle sensor(THREAD, _sensor_obj);
JavaValue result(T_VOID);
--- a/hotspot/src/share/vm/services/management.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/management.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -62,16 +62,16 @@
PerfVariable* Management::_end_vm_creation_time = NULL;
PerfVariable* Management::_vm_init_done_time = NULL;
-Klass* Management::_diagnosticCommandImpl_klass = NULL;
-Klass* Management::_garbageCollectorExtImpl_klass = NULL;
-Klass* Management::_garbageCollectorMXBean_klass = NULL;
-Klass* Management::_gcInfo_klass = NULL;
-Klass* Management::_managementFactoryHelper_klass = NULL;
-Klass* Management::_memoryManagerMXBean_klass = NULL;
-Klass* Management::_memoryPoolMXBean_klass = NULL;
-Klass* Management::_memoryUsage_klass = NULL;
-Klass* Management::_sensor_klass = NULL;
-Klass* Management::_threadInfo_klass = NULL;
+InstanceKlass* Management::_diagnosticCommandImpl_klass = NULL;
+InstanceKlass* Management::_garbageCollectorExtImpl_klass = NULL;
+InstanceKlass* Management::_garbageCollectorMXBean_klass = NULL;
+InstanceKlass* Management::_gcInfo_klass = NULL;
+InstanceKlass* Management::_managementFactoryHelper_klass = NULL;
+InstanceKlass* Management::_memoryManagerMXBean_klass = NULL;
+InstanceKlass* Management::_memoryPoolMXBean_klass = NULL;
+InstanceKlass* Management::_memoryUsage_klass = NULL;
+InstanceKlass* Management::_sensor_klass = NULL;
+InstanceKlass* Management::_threadInfo_klass = NULL;
jmmOptionalSupport Management::_optional_support = {0};
TimeStamp Management::_stamp;
@@ -156,11 +156,10 @@
vm_exit_during_initialization("Management agent initialization failure: "
"class jdk.internal.agent.Agent not found.");
}
- instanceKlassHandle ik (THREAD, k);
JavaValue result(T_VOID);
JavaCalls::call_static(&result,
- ik,
+ k,
vmSymbols::startAgent_name(),
vmSymbols::void_method_signature(),
CHECK);
@@ -171,30 +170,28 @@
memcpy(support, &_optional_support, sizeof(jmmOptionalSupport));
}
-Klass* Management::load_and_initialize_klass(Symbol* sh, TRAPS) {
+InstanceKlass* Management::load_and_initialize_klass(Symbol* sh, TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL);
- Klass* ik = initialize_klass(k, CHECK_NULL);
- return ik;
+ return initialize_klass(k, CHECK_NULL);
}
-Klass* Management::load_and_initialize_klass_or_null(Symbol* sh, TRAPS) {
+InstanceKlass* Management::load_and_initialize_klass_or_null(Symbol* sh, TRAPS) {
Klass* k = SystemDictionary::resolve_or_null(sh, CHECK_NULL);
if (k == NULL) {
return NULL;
}
- Klass* ik = initialize_klass(k, CHECK_NULL);
- return ik;
+ return initialize_klass(k, CHECK_NULL);
}
-Klass* Management::initialize_klass(Klass* k, TRAPS) {
- instanceKlassHandle ik (THREAD, k);
+InstanceKlass* Management::initialize_klass(Klass* k, TRAPS) {
+ InstanceKlass* ik = InstanceKlass::cast(k);
if (ik->should_be_initialized()) {
ik->initialize(CHECK_NULL);
}
// If these classes change to not be owned by the boot loader, they need
// to be walked to keep their class loader alive in oops_do.
assert(ik->class_loader() == NULL, "need to follow in oops_do");
- return ik();
+ return ik;
}
void Management::record_vm_startup_time(jlong begin, jlong duration) {
@@ -218,56 +215,56 @@
ThreadService::oops_do(f);
}
-Klass* Management::java_lang_management_ThreadInfo_klass(TRAPS) {
+InstanceKlass* Management::java_lang_management_ThreadInfo_klass(TRAPS) {
if (_threadInfo_klass == NULL) {
_threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL);
}
return _threadInfo_klass;
}
-Klass* Management::java_lang_management_MemoryUsage_klass(TRAPS) {
+InstanceKlass* Management::java_lang_management_MemoryUsage_klass(TRAPS) {
if (_memoryUsage_klass == NULL) {
_memoryUsage_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryUsage(), CHECK_NULL);
}
return _memoryUsage_klass;
}
-Klass* Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) {
+InstanceKlass* Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) {
if (_memoryPoolMXBean_klass == NULL) {
_memoryPoolMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryPoolMXBean(), CHECK_NULL);
}
return _memoryPoolMXBean_klass;
}
-Klass* Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) {
+InstanceKlass* Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) {
if (_memoryManagerMXBean_klass == NULL) {
_memoryManagerMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryManagerMXBean(), CHECK_NULL);
}
return _memoryManagerMXBean_klass;
}
-Klass* Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) {
+InstanceKlass* Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) {
if (_garbageCollectorMXBean_klass == NULL) {
_garbageCollectorMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_GarbageCollectorMXBean(), CHECK_NULL);
}
return _garbageCollectorMXBean_klass;
}
-Klass* Management::sun_management_Sensor_klass(TRAPS) {
+InstanceKlass* Management::sun_management_Sensor_klass(TRAPS) {
if (_sensor_klass == NULL) {
_sensor_klass = load_and_initialize_klass(vmSymbols::sun_management_Sensor(), CHECK_NULL);
}
return _sensor_klass;
}
-Klass* Management::sun_management_ManagementFactoryHelper_klass(TRAPS) {
+InstanceKlass* Management::sun_management_ManagementFactoryHelper_klass(TRAPS) {
if (_managementFactoryHelper_klass == NULL) {
_managementFactoryHelper_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactoryHelper(), CHECK_NULL);
}
return _managementFactoryHelper_klass;
}
-Klass* Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(TRAPS) {
+InstanceKlass* Management::com_sun_management_internal_GarbageCollectorExtImpl_klass(TRAPS) {
if (_garbageCollectorExtImpl_klass == NULL) {
_garbageCollectorExtImpl_klass =
load_and_initialize_klass_or_null(vmSymbols::com_sun_management_internal_GarbageCollectorExtImpl(), CHECK_NULL);
@@ -275,14 +272,14 @@
return _garbageCollectorExtImpl_klass;
}
-Klass* Management::com_sun_management_GcInfo_klass(TRAPS) {
+InstanceKlass* Management::com_sun_management_GcInfo_klass(TRAPS) {
if (_gcInfo_klass == NULL) {
_gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL);
}
return _gcInfo_klass;
}
-Klass* Management::com_sun_management_internal_DiagnosticCommandImpl_klass(TRAPS) {
+InstanceKlass* Management::com_sun_management_internal_DiagnosticCommandImpl_klass(TRAPS) {
if (_diagnosticCommandImpl_klass == NULL) {
_diagnosticCommandImpl_klass = load_and_initialize_klass(vmSymbols::com_sun_management_internal_DiagnosticCommandImpl(), CHECK_NULL);
}
@@ -333,8 +330,7 @@
// Helper function to construct a ThreadInfo object
instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS) {
- Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
+ InstanceKlass* ik = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
JavaValue result(T_VOID);
JavaCallArguments args(14);
@@ -363,8 +359,7 @@
typeArrayHandle depths_array,
objArrayHandle synchronizers_array,
TRAPS) {
- Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
+ InstanceKlass* ik = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
JavaValue result(T_VOID);
JavaCallArguments args(17);
@@ -401,7 +396,7 @@
oop mgr_obj = JNIHandles::resolve(mgr);
instanceHandle h(THREAD, (instanceOop) mgr_obj);
- Klass* k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL);
+ InstanceKlass* k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL);
if (!h->is_a(k)) {
THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
"the object is not an instance of java.lang.management.GarbageCollectorMXBean class",
@@ -507,9 +502,8 @@
}
// Allocate the resulting MemoryPoolMXBean[] object
- Klass* k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
- objArrayOop r = oopFactory::new_objArray(ik(), num_memory_pools, CHECK_NULL);
+ InstanceKlass* ik = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL);
+ objArrayOop r = oopFactory::new_objArray(ik, num_memory_pools, CHECK_NULL);
objArrayHandle poolArray(THREAD, r);
if (mgr == NULL) {
@@ -552,9 +546,8 @@
}
// Allocate the resulting MemoryManagerMXBean[] object
- Klass* k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
- objArrayOop r = oopFactory::new_objArray(ik(), num_mgrs, CHECK_NULL);
+ InstanceKlass* ik = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL);
+ objArrayOop r = oopFactory::new_objArray(ik, num_mgrs, CHECK_NULL);
objArrayHandle mgrArray(THREAD, r);
if (pool == NULL) {
@@ -629,7 +622,7 @@
THROW(vmSymbols::java_lang_NullPointerException());
}
- Klass* sensor_klass = Management::sun_management_Sensor_klass(CHECK);
+ InstanceKlass* sensor_klass = Management::sun_management_Sensor_klass(CHECK);
oop s = JNIHandles::resolve(sensorObj);
assert(s->is_instance(), "Sensor should be an instanceOop");
instanceHandle sensor_h(THREAD, (instanceOop) s);
@@ -1202,9 +1195,8 @@
int num_snapshots = dump_result.num_snapshots();
// create the result ThreadInfo[] object
- Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
- instanceKlassHandle ik (THREAD, k);
- objArrayOop r = oopFactory::new_objArray(ik(), num_snapshots, CHECK_NULL);
+ InstanceKlass* ik = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
+ objArrayOop r = oopFactory::new_objArray(ik, num_snapshots, CHECK_NULL);
objArrayHandle result_h(THREAD, r);
int index = 0;
@@ -1303,15 +1295,15 @@
JVM_ENTRY(jobjectArray, jmm_GetLoadedClasses(JNIEnv *env))
ResourceMark rm(THREAD);
- LoadedClassesEnumerator lce(THREAD); // Pass current Thread as parameter
+ LoadedClassesEnumerator lce;
int num_classes = lce.num_loaded_classes();
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), num_classes, CHECK_0);
objArrayHandle classes_ah(THREAD, r);
for (int i = 0; i < num_classes; i++) {
- KlassHandle kh = lce.get_klass(i);
- oop mirror = kh()->java_mirror();
+ Klass* k = lce.get_klass(i);
+ oop mirror = k->java_mirror();
classes_ah->obj_at_put(i, mirror);
}
--- a/hotspot/src/share/vm/services/management.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/management.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -42,19 +42,19 @@
static TimeStamp _stamp; // Timestamp since vm init done time
// Management klasses
- static Klass* _diagnosticCommandImpl_klass;
- static Klass* _garbageCollectorExtImpl_klass;
- static Klass* _garbageCollectorMXBean_klass;
- static Klass* _gcInfo_klass;
- static Klass* _managementFactoryHelper_klass;
- static Klass* _memoryManagerMXBean_klass;
- static Klass* _memoryPoolMXBean_klass;
- static Klass* _memoryUsage_klass;
- static Klass* _sensor_klass;
- static Klass* _threadInfo_klass;
- static Klass* load_and_initialize_klass(Symbol* sh, TRAPS);
- static Klass* load_and_initialize_klass_or_null(Symbol* sh, TRAPS);
- static Klass* initialize_klass(Klass* k, TRAPS);
+ static InstanceKlass* _diagnosticCommandImpl_klass;
+ static InstanceKlass* _garbageCollectorExtImpl_klass;
+ static InstanceKlass* _garbageCollectorMXBean_klass;
+ static InstanceKlass* _gcInfo_klass;
+ static InstanceKlass* _managementFactoryHelper_klass;
+ static InstanceKlass* _memoryManagerMXBean_klass;
+ static InstanceKlass* _memoryPoolMXBean_klass;
+ static InstanceKlass* _memoryUsage_klass;
+ static InstanceKlass* _sensor_klass;
+ static InstanceKlass* _threadInfo_klass;
+ static InstanceKlass* load_and_initialize_klass(Symbol* sh, TRAPS);
+ static InstanceKlass* load_and_initialize_klass_or_null(Symbol* sh, TRAPS);
+ static InstanceKlass* initialize_klass(Klass* k, TRAPS);
public:
static void init();
@@ -67,7 +67,7 @@
static void* get_jmm_interface(int version);
static void get_optional_support(jmmOptionalSupport* support);
- static void get_loaded_classes(JavaThread* cur_thread, GrowableArray<KlassHandle>* klass_handle_array);
+ static void get_loaded_classes(JavaThread* cur_thread, GrowableArray<Klass*>* klass_array);
static void record_vm_startup_time(jlong begin, jlong duration)
NOT_MANAGEMENT_RETURN;
@@ -87,21 +87,21 @@
}
// methods to return a Klass*.
- static Klass* java_lang_management_ThreadInfo_klass(TRAPS);
- static Klass* java_lang_management_MemoryUsage_klass(TRAPS)
+ static InstanceKlass* java_lang_management_ThreadInfo_klass(TRAPS);
+ static InstanceKlass* java_lang_management_MemoryUsage_klass(TRAPS)
NOT_MANAGEMENT_RETURN_(NULL);
- static Klass* java_lang_management_MemoryPoolMXBean_klass(TRAPS);
- static Klass* java_lang_management_MemoryManagerMXBean_klass(TRAPS);
- static Klass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS);
- static Klass* sun_management_ManagementFactoryHelper_klass(TRAPS)
+ static InstanceKlass* java_lang_management_MemoryPoolMXBean_klass(TRAPS);
+ static InstanceKlass* java_lang_management_MemoryManagerMXBean_klass(TRAPS);
+ static InstanceKlass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS);
+ static InstanceKlass* sun_management_ManagementFactoryHelper_klass(TRAPS)
NOT_MANAGEMENT_RETURN_(NULL);
- static Klass* sun_management_Sensor_klass(TRAPS)
+ static InstanceKlass* sun_management_Sensor_klass(TRAPS)
NOT_MANAGEMENT_RETURN_(NULL);
- static Klass* com_sun_management_internal_GarbageCollectorExtImpl_klass(TRAPS)
+ static InstanceKlass* com_sun_management_internal_GarbageCollectorExtImpl_klass(TRAPS)
NOT_MANAGEMENT_RETURN_(NULL);
- static Klass* com_sun_management_GcInfo_klass(TRAPS)
+ static InstanceKlass* com_sun_management_GcInfo_klass(TRAPS)
NOT_MANAGEMENT_RETURN_(NULL);
- static Klass* com_sun_management_internal_DiagnosticCommandImpl_klass(TRAPS)
+ static InstanceKlass* com_sun_management_internal_DiagnosticCommandImpl_klass(TRAPS)
NOT_MANAGEMENT_RETURN_(NULL);
static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS);
--- a/hotspot/src/share/vm/services/memoryManager.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/memoryManager.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -124,7 +124,7 @@
signature = vmSymbols::createMemoryManager_signature();
}
- instanceKlassHandle ik(THREAD, k);
+ InstanceKlass* ik = InstanceKlass::cast(k);
JavaCalls::call_static(&result,
ik,
--- a/hotspot/src/share/vm/services/memoryPool.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/memoryPool.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -86,8 +86,7 @@
if (pool_obj == NULL) {
// It's ok for more than one thread to execute the code up to the locked region.
// Extra pool instances will just be gc'ed.
- Klass* k = Management::sun_management_ManagementFactoryHelper_klass(CHECK_NULL);
- instanceKlassHandle ik(THREAD, k);
+ InstanceKlass* ik = Management::sun_management_ManagementFactoryHelper_klass(CHECK_NULL);
Handle pool_name = java_lang_String::create_from_str(_name, CHECK_NULL);
jlong usage_threshold_value = (_usage_threshold->is_high_threshold_supported() ? 0 : -1L);
--- a/hotspot/src/share/vm/services/memoryService.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/memoryService.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -529,8 +529,7 @@
}
Handle MemoryService::create_MemoryUsage_obj(MemoryUsage usage, TRAPS) {
- Klass* k = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
- instanceKlassHandle ik(THREAD, k);
+ InstanceKlass* ik = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
instanceHandle obj = ik->allocate_instance_handle(CHECK_NH);
--- a/hotspot/src/share/vm/services/threadService.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/services/threadService.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -607,12 +607,11 @@
}
Handle ThreadStackTrace::allocate_fill_stack_trace_element_array(TRAPS) {
- Klass* k = SystemDictionary::StackTraceElement_klass();
- assert(k != NULL, "must be loaded in 1.4+");
- instanceKlassHandle ik(THREAD, k);
+ InstanceKlass* ik = SystemDictionary::StackTraceElement_klass();
+ assert(ik != NULL, "must be loaded in 1.4+");
// Allocate an array of java/lang/StackTraceElement object
- objArrayOop ste = oopFactory::new_objArray(ik(), _depth, CHECK_NH);
+ objArrayOop ste = oopFactory::new_objArray(ik, _depth, CHECK_NH);
objArrayHandle backtrace(THREAD, ste);
for (int j = 0; j < _depth; j++) {
StackFrameInfo* frame = _frames->at(j);
--- a/hotspot/src/share/vm/shark/sharkRuntime.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/shark/sharkRuntime.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright 2008, 2009, 2010 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -41,16 +41,15 @@
int* indexes,
int num_indexes))
constantPoolHandle pool(thread, method(thread)->constants());
- KlassHandle exc_klass(thread, ((oop) tos_at(thread, 0))->klass());
+ Klass* exc_klass = ((oop) tos_at(thread, 0))->klass();
for (int i = 0; i < num_indexes; i++) {
Klass* tmp = pool->klass_at(indexes[i], CHECK_0);
- KlassHandle chk_klass(thread, tmp);
- if (exc_klass() == chk_klass())
+ if (exc_klass() == tmp)
return i;
- if (exc_klass()->is_subtype_of(chk_klass()))
+ if (exc_klass()->is_subtype_of(tmp))
return i;
}
@@ -85,7 +84,7 @@
JRT_ENTRY(void, SharkRuntime::new_instance(JavaThread* thread, int index))
Klass* k_oop = method(thread)->constants()->klass_at(index, CHECK);
- instanceKlassHandle klass(THREAD, k_oop);
+ InstanceKlass* klass = InstanceKlass::cast(k);
// Make sure we are not instantiating an abstract klass
klass->check_valid_for_instantiation(true, CHECK);
--- a/hotspot/src/share/vm/utilities/exceptions.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/utilities/exceptions.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -265,11 +265,10 @@
Handle h_exception;
// Resolve exception klass
- Klass* ik = SystemDictionary::resolve_or_fail(name, h_loader, h_protection_domain, true, thread);
- instanceKlassHandle klass(thread, ik);
+ InstanceKlass* klass = InstanceKlass::cast(SystemDictionary::resolve_or_fail(name, h_loader, h_protection_domain, true, thread));
if (!thread->has_pending_exception()) {
- assert(klass.not_null(), "klass must exist");
+ assert(klass != NULL, "klass must exist");
// We are about to create an instance - so make sure that klass is initialized
klass->initialize(thread);
if (!thread->has_pending_exception()) {
--- a/hotspot/src/share/vm/utilities/xmlstream.cpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/utilities/xmlstream.cpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, 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
@@ -422,17 +422,17 @@
// ------------------------------------------------------------------
// Output a klass attribute, in the form " klass='pkg/cls'".
// This is used only when there is no ciKlass available.
-void xmlStream::klass(KlassHandle klass) {
+void xmlStream::klass(Klass* klass) {
assert_if_no_error(inside_attrs(), "printing attributes");
- if (klass.is_null()) return;
+ if (klass == NULL) return;
print_raw(" klass='");
klass_text(klass);
print_raw("'");
}
-void xmlStream::klass_text(KlassHandle klass) {
+void xmlStream::klass_text(Klass* klass) {
assert_if_no_error(inside_attrs(), "printing attributes");
- if (klass.is_null()) return;
+ if (klass == NULL) return;
//klass->print_short_name(log->out());
klass->name()->print_symbol_on(out());
}
--- a/hotspot/src/share/vm/utilities/xmlstream.hpp Wed Mar 15 11:44:46 2017 +0100
+++ b/hotspot/src/share/vm/utilities/xmlstream.hpp Wed Mar 15 10:25:37 2017 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, 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
@@ -138,14 +138,14 @@
// commonly used XML attributes
void stamp(); // stamp='1.234'
void method(methodHandle m); // method='k n s' ...
- void klass(KlassHandle k); // klass='name'
+ void klass(Klass* k); // klass='name'
void name(const Symbol* s); // name='name'
void object(const char* attr, Metadata* val);
void object(const char* attr, Handle val);
// print the text alone (sans ''):
void method_text(methodHandle m);
- void klass_text(KlassHandle k); // klass='name'
+ void klass_text(Klass* k); // klass='name'
void name_text(const Symbol* s); // name='name'
void object_text(Metadata* x);
void object_text(Handle x);