< prev index next >
src/hotspot/share/memory/metaspaceShared.cpp
Print this page
@@ -22,10 +22,11 @@
*
*/
#include "precompiled.hpp"
#include "jvm.h"
+#include "classfile/classFileStream.hpp"
#include "classfile/classLoaderDataGraph.hpp"
#include "classfile/classListParser.hpp"
#include "classfile/classLoaderExt.hpp"
#include "classfile/dictionary.hpp"
#include "classfile/loaderConstraints.hpp"
@@ -42,10 +43,11 @@
#include "logging/log.hpp"
#include "logging/logMessage.hpp"
#include "memory/archiveUtils.inline.hpp"
#include "memory/dynamicArchive.hpp"
#include "memory/filemap.hpp"
+#include "memory/lambdaFormInvokers.hpp"
#include "memory/heapShared.inline.hpp"
#include "memory/metaspace.hpp"
#include "memory/metaspaceClosure.hpp"
#include "memory/metaspaceShared.hpp"
#include "memory/resourceArea.hpp"
@@ -659,10 +661,19 @@
if (h != NULL) {
h->array_klasses_do(collect_array_classes);
}
}
}
+ public:
+ void add_extra_classes(GrowableArray<Klass*>* klass_list) {
+ if (klass_list != NULL && klass_list->length() > 0) {
+ for (int i = 0; i < klass_list->length(); i++) {
+ Klass* k = klass_list->at(i);
+ _global_klass_objects->append_if_missing(k);
+ }
+ }
+ }
};
// Global object for holding symbols that created during class loading. See SymbolTable::new_symbol
static GrowableArray<Symbol*>* _global_symbol_objects = NULL;
@@ -1641,10 +1652,11 @@
// that so we don't have to walk the SystemDictionary again.
SystemDictionaryShared::check_excluded_classes();
_global_klass_objects = new GrowableArray<Klass*>(1000);
CollectClassesClosure collect_classes;
ClassLoaderDataGraph::loaded_classes_do(&collect_classes);
+ collect_classes.add_extra_classes(LambdaFormInvokers::replacement_holder_classes());
_global_klass_objects->sort(global_klass_compare);
print_class_stats();
// Ensure the ConstMethods won't be modified at run-time
@@ -1911,12 +1923,18 @@
log_info(cds)("Shared spaces: preloaded %d classes", class_count);
if (SharedArchiveConfigFile) {
log_info(cds)("Reading extra data from %s ...", SharedArchiveConfigFile);
read_extra_data(SharedArchiveConfigFile, THREAD);
- }
log_info(cds)("Reading extra data: done.");
+ }
+
+ if (LambdaFormInvokers::lambdaform_lines() != NULL) {
+ log_info(cds)("Regenerate MethodHandle Holder classes...");
+ LambdaFormInvokers::regenerate_holder_classes(THREAD);
+ log_info(cds)("Regenerate MethodHandle Holder classes done.");
+ }
HeapShared::init_subgraph_entry_fields(THREAD);
// Rewrite and link classes
log_info(cds)("Rewriting and linking classes ...");
@@ -1933,11 +1951,10 @@
Heap_lock : NULL); // needed by HeapShared::run_gc()
VMThread::execute(&op);
}
}
-
int MetaspaceShared::preload_classes(const char* class_list_path, TRAPS) {
ClassListParser parser(class_list_path);
int class_count = 0;
while (parser.parse_one_line()) {
@@ -2690,10 +2707,5 @@
} else {
st->print("CDS disabled.");
}
st->cr();
}
-
-
-
-
-
< prev index next >