--- a/hotspot/src/share/vm/classfile/classLoader.cpp Fri Jun 26 08:29:29 2015 +0200
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp Mon Jun 29 17:24:52 2015 +0000
@@ -156,10 +156,6 @@
}
-bool ClassPathEntry::is_lazy() {
- return false;
-}
-
ClassPathDirEntry::ClassPathDirEntry(const char* dir) : ClassPathEntry() {
char* copy = NEW_C_HEAP_ARRAY(char, strlen(dir)+1, mtClass);
strcpy(copy, dir);
@@ -276,80 +272,6 @@
}
}
-LazyClassPathEntry::LazyClassPathEntry(const char* path, const struct stat* st, bool throw_exception) : ClassPathEntry() {
- _path = os::strdup_check_oom(path);
- _st = *st;
- _resolved_entry = NULL;
- _has_error = false;
- _throw_exception = throw_exception;
-}
-
-LazyClassPathEntry::~LazyClassPathEntry() {
- os::free((void*)_path);
-}
-
-bool LazyClassPathEntry::is_jar_file() {
- size_t len = strlen(_path);
- if (len < 4 || strcmp(_path + len - 4, ".jar") != 0) return false;
- return ((_st.st_mode & S_IFREG) == S_IFREG);
-}
-
-ClassPathEntry* LazyClassPathEntry::resolve_entry(TRAPS) {
- if (_resolved_entry != NULL) {
- return (ClassPathEntry*) _resolved_entry;
- }
- ClassPathEntry* new_entry = NULL;
- new_entry = ClassLoader::create_class_path_entry(_path, &_st, false, _throw_exception, CHECK_NULL);
- if (!_throw_exception && new_entry == NULL) {
- assert(!HAS_PENDING_EXCEPTION, "must be");
- return NULL;
- }
- {
- ThreadCritical tc;
- if (_resolved_entry == NULL) {
- _resolved_entry = new_entry;
- return new_entry;
- }
- }
- assert(_resolved_entry != NULL, "bug in MT-safe resolution logic");
- delete new_entry;
- return (ClassPathEntry*) _resolved_entry;
-}
-
-ClassFileStream* LazyClassPathEntry::open_stream(const char* name, TRAPS) {
- if (_has_error) {
- return NULL;
- }
- ClassPathEntry* cpe = resolve_entry(THREAD);
- if (cpe == NULL) {
- _has_error = true;
- return NULL;
- } else {
- return cpe->open_stream(name, THREAD);
- }
-}
-
-bool LazyClassPathEntry::is_lazy() {
- return true;
-}
-
-u1* LazyClassPathEntry::open_entry(const char* name, jint* filesize, bool nul_terminate, TRAPS) {
- if (_has_error) {
- return NULL;
- }
- ClassPathEntry* cpe = resolve_entry(THREAD);
- if (cpe == NULL) {
- _has_error = true;
- return NULL;
- } else if (cpe->is_jar_file()) {
- return ((ClassPathZipEntry*)cpe)->open_entry(name, filesize, nul_terminate,THREAD);
- } else {
- ShouldNotReachHere();
- *filesize = 0;
- return NULL;
- }
-}
-
ClassPathImageEntry::ClassPathImageEntry(ImageFileReader* image) :
ClassPathEntry(),
_image(image),
@@ -564,11 +486,8 @@
}
ClassPathEntry* ClassLoader::create_class_path_entry(const char *path, const struct stat* st,
- bool lazy, bool throw_exception, TRAPS) {
+ bool throw_exception, TRAPS) {
JavaThread* thread = JavaThread::current();
- if (lazy) {
- return new LazyClassPathEntry(path, st, throw_exception);
- }
ClassPathEntry* new_entry = NULL;
if ((st->st_mode & S_IFREG) == S_IFREG) {
// Regular file, should be a zip or image file
@@ -586,33 +505,34 @@
if (image != NULL) {
new_entry = new ClassPathImageEntry(image);
} else {
- char* error_msg = NULL;
- jzfile* zip;
- {
- // enable call to C land
- ThreadToNativeFromVM ttn(thread);
- HandleMark hm(thread);
- zip = (*ZipOpen)(canonical_path, &error_msg);
- }
- if (zip != NULL && error_msg == NULL) {
- new_entry = new ClassPathZipEntry(zip, path);
- } else {
- ResourceMark rm(thread);
- char *msg;
- if (error_msg == NULL) {
- msg = NEW_RESOURCE_ARRAY(char, strlen(path) + 128); ;
- jio_snprintf(msg, strlen(path) + 127, "error in opening JAR file %s", path);
+ char* error_msg = NULL;
+ jzfile* zip;
+ {
+ // enable call to C land
+ ThreadToNativeFromVM ttn(thread);
+ HandleMark hm(thread);
+ zip = (*ZipOpen)(canonical_path, &error_msg);
+ }
+ if (zip != NULL && error_msg == NULL) {
+ new_entry = new ClassPathZipEntry(zip, path);
} else {
- int len = (int)(strlen(path) + strlen(error_msg) + 128);
- msg = NEW_RESOURCE_ARRAY(char, len); ;
- jio_snprintf(msg, len - 1, "error in opening JAR file <%s> %s", error_msg, path);
+ ResourceMark rm(thread);
+ char *msg;
+ if (error_msg == NULL) {
+ msg = NEW_RESOURCE_ARRAY(char, strlen(path) + 128); ;
+ jio_snprintf(msg, strlen(path) + 127, "error in opening JAR file %s", path);
+ } else {
+ int len = (int)(strlen(path) + strlen(error_msg) + 128);
+ msg = NEW_RESOURCE_ARRAY(char, len); ;
+ jio_snprintf(msg, len - 1, "error in opening JAR file <%s> %s", error_msg, path);
+ }
+ // Don't complain about bad jar files added via -Xbootclasspath/a:.
+ if (throw_exception && is_init_completed()) {
+ THROW_MSG_(vmSymbols::java_lang_ClassNotFoundException(), msg, NULL);
+ } else {
+ return NULL;
+ }
}
- if (throw_exception) {
- THROW_MSG_(vmSymbols::java_lang_ClassNotFoundException(), msg, NULL);
- } else {
- return NULL;
- }
- }
}
if (TraceClassLoading || TraceClassPaths) {
tty->print_cr("[Opened %s]", path);
@@ -690,7 +610,7 @@
// File or directory found
ClassPathEntry* new_entry = NULL;
Thread* THREAD = Thread::current();
- new_entry = create_class_path_entry(path, &st, LazyBootClassLoader, throw_exception, CHECK_(false));
+ new_entry = create_class_path_entry(path, &st, throw_exception, CHECK_(false));
if (new_entry == NULL) {
return false;
}
@@ -1343,19 +1263,6 @@
return false;
}
-void LazyClassPathEntry::compile_the_world(Handle loader, TRAPS) {
- ClassPathEntry* cpe = resolve_entry(THREAD);
- if (cpe != NULL) {
- cpe->compile_the_world(loader, CHECK);
- }
-}
-
-bool LazyClassPathEntry::is_jrt() {
- Thread* THREAD = Thread::current();
- ClassPathEntry* cpe = resolve_entry(THREAD);
- return (cpe != NULL) ? cpe->is_jar_file() : false;
-}
-
void ClassLoader::compile_the_world() {
EXCEPTION_MARK;
HandleMark hm(THREAD);
--- a/hotspot/src/share/vm/classfile/classLoader.hpp Fri Jun 26 08:29:29 2015 +0200
+++ b/hotspot/src/share/vm/classfile/classLoader.hpp Mon Jun 29 17:24:52 2015 +0000
@@ -53,7 +53,6 @@
virtual bool is_jar_file() = 0;
virtual const char* name() = 0;
virtual ImageFileReader* image() = 0;
- virtual bool is_lazy();
// Constructor
ClassPathEntry();
// Attempt to locate file_name through this class path entry.
@@ -113,30 +112,6 @@
};
-// For lazier loading of boot class path entries
-class LazyClassPathEntry: public ClassPathEntry {
- private:
- const char* _path; // dir or file
- struct stat _st;
- bool _has_error;
- bool _throw_exception;
- volatile ClassPathEntry* _resolved_entry;
- ClassPathEntry* resolve_entry(TRAPS);
- public:
- bool is_jar_file();
- const char* name() { return _path; }
- ImageFileReader* image() { return NULL; }
- LazyClassPathEntry(const char* path, const struct stat* st, bool throw_exception);
- virtual ~LazyClassPathEntry();
- u1* open_entry(const char* name, jint* filesize, bool nul_terminate, TRAPS);
-
- ClassFileStream* open_stream(const char* name, TRAPS);
- virtual bool is_lazy();
- // Debugging
- NOT_PRODUCT(void compile_the_world(Handle loader, TRAPS);)
- NOT_PRODUCT(bool is_jrt();)
-};
-
// For java image files
class ClassPathImageEntry: public ClassPathEntry {
private:
@@ -168,7 +143,6 @@
package_hash_table_size = 31 // Number of buckets
};
protected:
- friend class LazyClassPathEntry;
// Performance counters
static PerfCounter* _perf_accumulated_time;
@@ -233,7 +207,7 @@
static void load_zip_library();
static ClassPathEntry* create_class_path_entry(const char *path, const struct stat* st,
- bool lazy, bool throw_exception, TRAPS);
+ bool throw_exception, TRAPS);
// Canonicalizes path names, so strcmp will work properly. This is mainly
// to avoid confusing the zip library
--- a/hotspot/src/share/vm/runtime/arguments.cpp Fri Jun 26 08:29:29 2015 +0200
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Mon Jun 29 17:24:52 2015 +0000
@@ -275,6 +275,7 @@
{ "AdaptiveSizePausePolicy", JDK_Version::jdk(9), JDK_Version::jdk(10) },
{ "ParallelGCRetainPLAB", JDK_Version::jdk(9), JDK_Version::jdk(10) },
{ "ThreadSafetyMargin", JDK_Version::jdk(9), JDK_Version::jdk(10) },
+ { "LazyBootClassLoader", JDK_Version::jdk(9), JDK_Version::jdk(10) },
{ NULL, JDK_Version(0), JDK_Version(0) }
};
--- a/hotspot/src/share/vm/runtime/globals.hpp Fri Jun 26 08:29:29 2015 +0200
+++ b/hotspot/src/share/vm/runtime/globals.hpp Mon Jun 29 17:24:52 2015 +0000
@@ -1362,9 +1362,6 @@
develop(uintx, PreallocatedOutOfMemoryErrorCount, 4, \
"Number of OutOfMemoryErrors preallocated with backtrace") \
\
- product(bool, LazyBootClassLoader, true, \
- "Enable/disable lazy opening of boot class path entries") \
- \
product(bool, UseXMMForArrayCopy, false, \
"Use SSE2 MOVQ instruction for Arraycopy") \
\