8303548: Arguments::get_default_shared_archive_path() should cache the result for future use

Reviewed-by: ccheung, dholmes
This commit is contained in:
Matias Saavedra Silva
2023-03-10 16:30:48 +00:00
committed by Coleen Phillimore
parent f2a36b4b52
commit 548d552bc1
3 changed files with 18 additions and 18 deletions

View File

@@ -191,7 +191,6 @@ void FileMapInfo::populate_header(size_t core_region_alignment) {
header_size += base_archive_name_size;
base_archive_name_offset = c_header_size;
}
FREE_C_HEAP_ARRAY(const char, default_base_archive_name);
}
ResourceMark rm;
GrowableArray<const char*>* app_cp_array = create_dumptime_app_classpath_array();

View File

@@ -96,6 +96,7 @@ size_t Arguments::_default_SharedBaseAddress = SharedBaseAddress;
bool Arguments::_enable_preview = false;
char* Arguments::_default_shared_archive_path = nullptr;
char* Arguments::SharedArchivePath = nullptr;
char* Arguments::SharedDynamicArchivePath = nullptr;
@@ -3410,19 +3411,20 @@ void Arguments::set_shared_spaces_flags_and_archive_paths() {
// Sharing support
// Construct the path to the archive
char* Arguments::get_default_shared_archive_path() {
char *default_archive_path;
char jvm_path[JVM_MAXPATHLEN];
os::jvm_path(jvm_path, sizeof(jvm_path));
char *end = strrchr(jvm_path, *os::file_separator());
if (end != nullptr) *end = '\0';
size_t jvm_path_len = strlen(jvm_path);
size_t file_sep_len = strlen(os::file_separator());
const size_t len = jvm_path_len + file_sep_len + 20;
default_archive_path = NEW_C_HEAP_ARRAY(char, len, mtArguments);
jio_snprintf(default_archive_path, len,
LP64_ONLY(!UseCompressedOops ? "%s%sclasses_nocoops.jsa":) "%s%sclasses.jsa",
jvm_path, os::file_separator());
return default_archive_path;
if (_default_shared_archive_path == nullptr) {
char jvm_path[JVM_MAXPATHLEN];
os::jvm_path(jvm_path, sizeof(jvm_path));
char *end = strrchr(jvm_path, *os::file_separator());
if (end != nullptr) *end = '\0';
size_t jvm_path_len = strlen(jvm_path);
size_t file_sep_len = strlen(os::file_separator());
const size_t len = jvm_path_len + file_sep_len + 20;
_default_shared_archive_path = NEW_C_HEAP_ARRAY(char, len, mtArguments);
jio_snprintf(_default_shared_archive_path, len,
LP64_ONLY(!UseCompressedOops ? "%s%sclasses_nocoops.jsa":) "%s%sclasses.jsa",
jvm_path, os::file_separator());
}
return _default_shared_archive_path;
}
int Arguments::num_archives(const char* archive_path) {
@@ -3474,12 +3476,10 @@ void Arguments::init_shared_archive_paths() {
}
check_unsupported_dumping_properties();
char* shared_archive_path = get_default_shared_archive_path();
if (os::same_files(shared_archive_path, ArchiveClassesAtExit)) {
if (os::same_files(get_default_shared_archive_path(), ArchiveClassesAtExit)) {
vm_exit_during_initialization(
"Cannot specify the default CDS archive for -XX:ArchiveClassesAtExit", shared_archive_path);
"Cannot specify the default CDS archive for -XX:ArchiveClassesAtExit", get_default_shared_archive_path());
}
FREE_C_HEAP_ARRAY(char, shared_archive_path);
}
if (SharedArchiveFile == nullptr) {

View File

@@ -470,6 +470,7 @@ class Arguments : AllStatic {
// Return nullptr if the arg has expired.
static const char* handle_aliases_and_deprecation(const char* arg);
static char* _default_shared_archive_path;
static char* SharedArchivePath;
static char* SharedDynamicArchivePath;
static size_t _default_SharedBaseAddress; // The default value specified in globals.hpp