@@ -96,6 +96,7 @@ size_t Arguments::_default_SharedBaseAddress = SharedBaseAddress;
9696
9797bool Arguments::_enable_preview = false ;
9898
99+ char * Arguments::_default_shared_archive_path = nullptr ;
99100char * Arguments::SharedArchivePath = nullptr ;
100101char * Arguments::SharedDynamicArchivePath = nullptr ;
101102
@@ -3410,19 +3411,20 @@ void Arguments::set_shared_spaces_flags_and_archive_paths() {
34103411// Sharing support
34113412// Construct the path to the archive
34123413char * Arguments::get_default_shared_archive_path () {
3413- char *default_archive_path;
3414- char jvm_path[JVM_MAXPATHLEN];
3415- os::jvm_path (jvm_path, sizeof (jvm_path));
3416- char *end = strrchr (jvm_path, *os::file_separator ());
3417- if (end != nullptr ) *end = ' \0 ' ;
3418- size_t jvm_path_len = strlen (jvm_path);
3419- size_t file_sep_len = strlen (os::file_separator ());
3420- const size_t len = jvm_path_len + file_sep_len + 20 ;
3421- default_archive_path = NEW_C_HEAP_ARRAY (char , len, mtArguments);
3422- jio_snprintf (default_archive_path, len,
3423- LP64_ONLY (!UseCompressedOops ? " %s%sclasses_nocoops.jsa" :) " %s%sclasses.jsa" ,
3424- jvm_path, os::file_separator ());
3425- return default_archive_path;
3414+ if (_default_shared_archive_path == nullptr ) {
3415+ char jvm_path[JVM_MAXPATHLEN];
3416+ os::jvm_path (jvm_path, sizeof (jvm_path));
3417+ char *end = strrchr (jvm_path, *os::file_separator ());
3418+ if (end != nullptr ) *end = ' \0 ' ;
3419+ size_t jvm_path_len = strlen (jvm_path);
3420+ size_t file_sep_len = strlen (os::file_separator ());
3421+ const size_t len = jvm_path_len + file_sep_len + 20 ;
3422+ _default_shared_archive_path = NEW_C_HEAP_ARRAY (char , len, mtArguments);
3423+ jio_snprintf (_default_shared_archive_path, len,
3424+ LP64_ONLY (!UseCompressedOops ? " %s%sclasses_nocoops.jsa" :) " %s%sclasses.jsa" ,
3425+ jvm_path, os::file_separator ());
3426+ }
3427+ return _default_shared_archive_path;
34263428}
34273429
34283430int Arguments::num_archives (const char * archive_path) {
@@ -3474,12 +3476,10 @@ void Arguments::init_shared_archive_paths() {
34743476 }
34753477 check_unsupported_dumping_properties ();
34763478
3477- char * shared_archive_path = get_default_shared_archive_path ();
3478- if (os::same_files (shared_archive_path, ArchiveClassesAtExit)) {
3479+ if (os::same_files (get_default_shared_archive_path (), ArchiveClassesAtExit)) {
34793480 vm_exit_during_initialization (
3480- " Cannot specify the default CDS archive for -XX:ArchiveClassesAtExit" , shared_archive_path );
3481+ " Cannot specify the default CDS archive for -XX:ArchiveClassesAtExit" , get_default_shared_archive_path () );
34813482 }
3482- FREE_C_HEAP_ARRAY (char , shared_archive_path);
34833483 }
34843484
34853485 if (SharedArchiveFile == nullptr ) {
0 commit comments