Skip to content

Commit 751985b

Browse files
committedSep 27, 2023
added ClassPrelinker::replay_training_at_init_for_javabase_preloaded_classes()

File tree

7 files changed

+25
-2
lines changed

7 files changed

+25
-2
lines changed
 

‎src/hotspot/share/cds/cdsConfig.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ bool CDSConfig::is_using_dumptime_tables() {
4141
return is_dumping_static_archive() || is_dumping_dynamic_archive();
4242
}
4343

44+
bool CDSConfig::is_dumping_archive() {
45+
return is_dumping_static_archive() || is_dumping_dynamic_archive();
46+
}
47+
4448
bool CDSConfig::is_dumping_static_archive() {
4549
return DumpSharedSpaces || is_dumping_final_static_archive();
4650
}

‎src/hotspot/share/cds/classPrelinker.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -1174,3 +1174,19 @@ void ClassPrelinker::init_javabase_preloaded_classes(TRAPS) {
11741174
}
11751175
}
11761176
}
1177+
1178+
void ClassPrelinker::replay_training_at_init_for_javabase_preloaded_classes(TRAPS) {
1179+
Array<InstanceKlass*>* preloaded_klasses = _static_preloaded_klasses._boot;
1180+
if (preloaded_klasses != nullptr) {
1181+
for (int i = 0; i < preloaded_klasses->length(); i++) {
1182+
InstanceKlass* ik = preloaded_klasses->at(i);
1183+
if (ik->is_initialized()) {
1184+
if (log_is_enabled(Debug, cds, init)) {
1185+
ResourceMark rm;
1186+
log_debug(cds, init)("replay training %s", ik->external_name());
1187+
}
1188+
ik->replay_training_at_init(CHECK);
1189+
}
1190+
}
1191+
}
1192+
}

‎src/hotspot/share/cds/classPrelinker.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ class ClassPrelinker : AllStatic {
155155

156156
static void runtime_preload(JavaThread* current, Handle loader);
157157
static void init_javabase_preloaded_classes(TRAPS);
158+
static void replay_training_at_init_for_javabase_preloaded_classes(TRAPS);
158159
static bool class_preloading_finished();
159160
};
160161

‎src/hotspot/share/compiler/compileBroker.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ class CompileBroker: AllStatic {
291291
return nullptr;
292292
}
293293

294+
static bool initialized() { return _initialized; }
294295
static bool compilation_is_complete(const methodHandle& method, int osr_bci, int comp_level, bool online_only = false);
295296
static bool compilation_is_in_queue(const methodHandle& method);
296297
static void print_compile_queues(outputStream* st);

‎src/hotspot/share/oops/instanceKlass.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1319,7 +1319,7 @@ void InstanceKlass::initialize_impl(TRAPS) {
13191319
}
13201320

13211321
void InstanceKlass::replay_training_at_init(TRAPS) {
1322-
if (TrainingData::have_data()) {
1322+
if (CompileBroker::initialized() && TrainingData::have_data()) {
13231323
KlassTrainingData* ktd = KlassTrainingData::find(this);
13241324
if (ktd != nullptr) {
13251325
guarantee(ktd->has_holder(), "");

‎src/hotspot/share/oops/instanceKlass.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ class InstanceKlass: public Klass {
558558
bool should_be_initialized() const; // means that initialize should be called
559559
void initialize_from_cds(TRAPS);
560560
void initialize(TRAPS);
561+
void replay_training_at_init(TRAPS);
561562
void link_class(TRAPS);
562563
bool link_class_or_fail(TRAPS); // returns false on failure
563564
void rewrite_class(TRAPS);
@@ -1122,7 +1123,6 @@ class InstanceKlass: public Klass {
11221123

11231124
void add_initialization_error(JavaThread* current, Handle exception);
11241125
oop get_initialization_error(JavaThread* current);
1125-
void replay_training_at_init(TRAPS);
11261126

11271127
// find a local method (returns null if not found)
11281128
Method* find_method_impl(const Symbol* name,

‎src/hotspot/share/runtime/threads.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
758758

759759
if (CDSConfig::has_preloaded_classes()) {
760760
force_JVMCI_initialization = initialize_compilation(CHECK_JNI_ERR);
761+
ClassPrelinker::replay_training_at_init_for_javabase_preloaded_classes(CHECK_JNI_ERR);
761762
}
762763

763764
// This will initialize the module system. Only java.base classes can be

0 commit comments

Comments
 (0)
Please sign in to comment.