diff --git a/src/hotspot/share/oops/trainingData.cpp b/src/hotspot/share/oops/trainingData.cpp index cc15fe944f2..e82a7a3e2bd 100644 --- a/src/hotspot/share/oops/trainingData.cpp +++ b/src/hotspot/share/oops/trainingData.cpp @@ -35,6 +35,7 @@ #include "memory/metadataFactory.hpp" #include "memory/metaspaceClosure.hpp" #include "memory/resourceArea.hpp" +#include "memory/universe.hpp" #include "oops/method.hpp" #include "oops/methodCounters.hpp" #include "oops/trainingData.hpp" @@ -433,9 +434,9 @@ void KlassTrainingData::print_on(outputStream* st, bool name_only) const { KlassTrainingData::KlassTrainingData(InstanceKlass* klass) : TrainingData(klass) { assert(klass != nullptr, ""); - Handle hm(JavaThread::current(), klass->java_mirror()); - jobject hmj = JNIHandles::make_global(hm); - _holder_mirror = hmj; + // The OopHandle constructor will allocate a handle. We don't need to ever release it so we don't preserve + // the handle object. + OopHandle handle(Universe::vm_global(), klass->java_mirror()); _holder = klass; assert(holder() == klass, ""); } @@ -759,7 +760,6 @@ void TrainingData::DepList::prepare(ClassLoaderData* loader_data) { void KlassTrainingData::remove_unshareable_info() { TrainingData::remove_unshareable_info(); - _holder_mirror = nullptr; _comp_deps.remove_unshareable_info(); } diff --git a/src/hotspot/share/oops/trainingData.hpp b/src/hotspot/share/oops/trainingData.hpp index 6acf19b4d5e..1d03056871b 100644 --- a/src/hotspot/share/oops/trainingData.hpp +++ b/src/hotspot/share/oops/trainingData.hpp @@ -431,7 +431,6 @@ class KlassTrainingData : public TrainingData { // cross-link to live klass, or null if not loaded or encountered yet InstanceKlass* _holder; - jobject _holder_mirror; // extra link to prevent unloading by GC DepList _comp_deps; // compiles that depend on me @@ -454,7 +453,6 @@ class KlassTrainingData : public TrainingData { TrainingDataLocker::assert_locked(); _comp_deps.remove_if_existing(ctd); } - public: Symbol* name() const { precond(has_holder());