--- a/hotspot/src/share/vm/classfile/classLoader.hpp Tue Aug 12 21:16:05 2014 -0400
+++ b/hotspot/src/share/vm/classfile/classLoader.hpp Tue Aug 12 17:29:00 2014 -0700
@@ -107,6 +107,7 @@
const char* name() { return _zip_name; }
ClassPathZipEntry(jzfile* zip, const char* zip_name);
~ClassPathZipEntry();
+ u1* open_entry(const char* name, jint* filesize, bool nul_terminate, TRAPS);
ClassFileStream* open_stream(const char* name, TRAPS);
void contents_do(void f(const char* name, void* context), void* context);
// Debugging
@@ -122,13 +123,15 @@
struct stat _st;
MetaIndex* _meta_index;
bool _has_error;
+ bool _throw_exception;
volatile ClassPathEntry* _resolved_entry;
ClassPathEntry* resolve_entry(TRAPS);
public:
bool is_jar_file();
const char* name() { return _path; }
- LazyClassPathEntry(char* path, const struct stat* st);
+ LazyClassPathEntry(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);
void set_meta_index(MetaIndex* meta_index) { _meta_index = meta_index; }
@@ -140,6 +143,7 @@
class PackageHashtable;
class PackageInfo;
+class SharedPathsMiscInfo;
template <MEMFLAGS F> class HashtableBucket;
class ClassLoader: AllStatic {
@@ -147,7 +151,7 @@
enum SomeConstants {
package_hash_table_size = 31 // Number of buckets
};
- private:
+ protected:
friend class LazyClassPathEntry;
// Performance counters
@@ -189,10 +193,15 @@
static ClassPathEntry* _first_entry;
// Last entry in linked list of ClassPathEntry instances
static ClassPathEntry* _last_entry;
+ static int _num_entries;
+
// Hash table used to keep track of loaded packages
static PackageHashtable* _package_hash_table;
static const char* _shared_archive;
+ // Info used by CDS
+ CDS_ONLY(static SharedPathsMiscInfo * _shared_paths_misc_info;)
+
// Hash function
static unsigned int hash(const char *s, int n);
// Returns the package file name corresponding to the specified package
@@ -203,19 +212,23 @@
static bool add_package(const char *pkgname, int classpath_index, TRAPS);
// Initialization
- static void setup_meta_index();
+ static void setup_bootstrap_meta_index();
+ static void setup_meta_index(const char* meta_index_path, const char* meta_index_dir,
+ int start_index);
static void setup_bootstrap_search_path();
+ static void setup_search_path(char *class_path);
+
static void load_zip_library();
static ClassPathEntry* create_class_path_entry(char *path, const struct stat* st,
- bool lazy, TRAPS);
+ bool lazy, bool throw_exception, TRAPS);
// Canonicalizes path names, so strcmp will work properly. This is mainly
// to avoid confusing the zip library
static bool get_canonical_path(char* orig, char* out, int len);
public:
- // Used by the kernel jvm.
- static void update_class_path_entry_list(char *path,
- bool check_for_duplicates);
+ static bool update_class_path_entry_list(char *path,
+ bool check_for_duplicates,
+ bool throw_exception=true);
static void print_bootclasspath();
// Timing
@@ -298,6 +311,7 @@
// Initialization
static void initialize();
+ CDS_ONLY(static void initialize_shared_path();)
static void create_package_info_table();
static void create_package_info_table(HashtableBucket<mtClass> *t, int length,
int number_of_entries);
@@ -312,10 +326,21 @@
return e;
}
+#if INCLUDE_CDS
// Sharing dump and restore
static void copy_package_info_buckets(char** top, char* end);
static void copy_package_info_table(char** top, char* end);
+ static void check_shared_classpath(const char *path);
+ static void finalize_shared_paths_misc_info();
+ static int get_shared_paths_misc_info_size();
+ static void* get_shared_paths_misc_info();
+ static bool check_shared_paths_misc_info(void* info, int size);
+ static void exit_with_path_failure(const char* error, const char* message);
+#endif
+
+ static void trace_class_path(const char* msg, const char* name = NULL);
+
// VM monitoring and management support
static jlong classloader_time_ms();
static jlong class_method_total_size();
@@ -339,7 +364,7 @@
// Force compilation of all methods in all classes in bootstrap class path (stress test)
#ifndef PRODUCT
- private:
+ protected:
static int _compile_the_world_class_counter;
static int _compile_the_world_method_counter;
public: