From 29a96c57ac4302b7398e3927faf3ee4e9fccb733 Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Tue, 11 Mar 2025 12:25:00 -0700 Subject: [PATCH 1/3] Simplify get default classlist. --- src/hotspot/share/cds/metaspaceShared.cpp | 35 ++++------------------- src/hotspot/share/cds/metaspaceShared.hpp | 1 - 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index ee877c474b961..7b82f12b754a4 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -860,38 +860,13 @@ void MetaspaceShared::adjust_heap_sizes_for_dumping() { } #endif // INCLUDE_CDS_JAVA_HEAP && _LP64 -void MetaspaceShared::get_default_classlist(char* default_classlist, const size_t buf_size) { - // Construct the path to the class list (in jre/lib) - // Walk up two directories from the location of the VM and - // optionally tack on "lib" (depending on platform) - os::jvm_path(default_classlist, (jint)(buf_size)); - for (int i = 0; i < 3; i++) { - char *end = strrchr(default_classlist, *os::file_separator()); - if (end != nullptr) *end = '\0'; - } - size_t classlist_path_len = strlen(default_classlist); - if (classlist_path_len >= 3) { - if (strcmp(default_classlist + classlist_path_len - 3, "lib") != 0) { - if (classlist_path_len < buf_size - 4) { - jio_snprintf(default_classlist + classlist_path_len, - buf_size - classlist_path_len, - "%slib", os::file_separator()); - classlist_path_len += 4; - } - } - } - if (classlist_path_len < buf_size - 10) { - jio_snprintf(default_classlist + classlist_path_len, - buf_size - classlist_path_len, - "%sclasslist", os::file_separator()); - } -} - void MetaspaceShared::preload_classes(TRAPS) { char default_classlist[JVM_MAXPATHLEN]; const char* classlist_path; + const char* filesep = os::file_separator(); - get_default_classlist(default_classlist, sizeof(default_classlist)); + jio_snprintf(default_classlist, JVM_MAXPATHLEN, "%s%slib%sclasslist", + Arguments::get_java_home(), filesep, filesep); if (SharedClassListFile == nullptr) { classlist_path = default_classlist; } else { @@ -946,7 +921,9 @@ void MetaspaceShared::preload_and_dump_impl(StaticArchiveBuilder& builder, TRAPS if (CDSConfig::is_dumping_preimage_static_archive()) { log_info(cds)("Reading lambda form invokers from JDK default classlist ..."); char default_classlist[JVM_MAXPATHLEN]; - get_default_classlist(default_classlist, sizeof(default_classlist)); + const char* filesep = os::file_separator(); + jio_snprintf(default_classlist, JVM_MAXPATHLEN, "%s%slib%sclasslist", + Arguments::get_java_home(), filesep, filesep); struct stat statbuf; if (os::stat(default_classlist, &statbuf) == 0) { ClassListParser::parse_classlist(default_classlist, diff --git a/src/hotspot/share/cds/metaspaceShared.hpp b/src/hotspot/share/cds/metaspaceShared.hpp index 6d5f273041a83..25a44578ddae5 100644 --- a/src/hotspot/share/cds/metaspaceShared.hpp +++ b/src/hotspot/share/cds/metaspaceShared.hpp @@ -195,6 +195,5 @@ class MetaspaceShared : AllStatic { ReservedSpace& class_space_rs); static MapArchiveResult map_archive(FileMapInfo* mapinfo, char* mapped_base_address, ReservedSpace rs); static void unmap_archive(FileMapInfo* mapinfo); - static void get_default_classlist(char* default_classlist, const size_t buf_size); }; #endif // SHARE_CDS_METASPACESHARED_HPP From cdb6b68b0bb506e084aa9a241cc14aa82a5a9860 Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Tue, 11 Mar 2025 13:57:50 -0700 Subject: [PATCH 2/3] Resolve Whitespace error. --- src/hotspot/share/cds/metaspaceShared.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index 7b82f12b754a4..e5f7c012ac403 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -866,7 +866,7 @@ void MetaspaceShared::preload_classes(TRAPS) { const char* filesep = os::file_separator(); jio_snprintf(default_classlist, JVM_MAXPATHLEN, "%s%slib%sclasslist", - Arguments::get_java_home(), filesep, filesep); + Arguments::get_java_home(), filesep, filesep); if (SharedClassListFile == nullptr) { classlist_path = default_classlist; } else { From 92d3a88035ad338093e93724e017e106097bc3a7 Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Thu, 13 Mar 2025 16:29:45 -0700 Subject: [PATCH 3/3] Address iklam's comment: - Use get_default_classlist helper function. --- src/hotspot/share/cds/metaspaceShared.cpp | 14 ++++++++------ src/hotspot/share/cds/metaspaceShared.hpp | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index e5f7c012ac403..706eb6923c62e 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -860,13 +860,17 @@ void MetaspaceShared::adjust_heap_sizes_for_dumping() { } #endif // INCLUDE_CDS_JAVA_HEAP && _LP64 +void MetaspaceShared::get_default_classlist(char* default_classlist, const size_t buf_size) { + const char* filesep = os::file_separator(); + jio_snprintf(default_classlist, buf_size, "%s%slib%sclasslist", + Arguments::get_java_home(), filesep, filesep); +} + void MetaspaceShared::preload_classes(TRAPS) { char default_classlist[JVM_MAXPATHLEN]; const char* classlist_path; - const char* filesep = os::file_separator(); - jio_snprintf(default_classlist, JVM_MAXPATHLEN, "%s%slib%sclasslist", - Arguments::get_java_home(), filesep, filesep); + get_default_classlist(default_classlist, JVM_MAXPATHLEN); if (SharedClassListFile == nullptr) { classlist_path = default_classlist; } else { @@ -921,9 +925,7 @@ void MetaspaceShared::preload_and_dump_impl(StaticArchiveBuilder& builder, TRAPS if (CDSConfig::is_dumping_preimage_static_archive()) { log_info(cds)("Reading lambda form invokers from JDK default classlist ..."); char default_classlist[JVM_MAXPATHLEN]; - const char* filesep = os::file_separator(); - jio_snprintf(default_classlist, JVM_MAXPATHLEN, "%s%slib%sclasslist", - Arguments::get_java_home(), filesep, filesep); + get_default_classlist(default_classlist, JVM_MAXPATHLEN); struct stat statbuf; if (os::stat(default_classlist, &statbuf) == 0) { ClassListParser::parse_classlist(default_classlist, diff --git a/src/hotspot/share/cds/metaspaceShared.hpp b/src/hotspot/share/cds/metaspaceShared.hpp index 25a44578ddae5..6d5f273041a83 100644 --- a/src/hotspot/share/cds/metaspaceShared.hpp +++ b/src/hotspot/share/cds/metaspaceShared.hpp @@ -195,5 +195,6 @@ class MetaspaceShared : AllStatic { ReservedSpace& class_space_rs); static MapArchiveResult map_archive(FileMapInfo* mapinfo, char* mapped_base_address, ReservedSpace rs); static void unmap_archive(FileMapInfo* mapinfo); + static void get_default_classlist(char* default_classlist, const size_t buf_size); }; #endif // SHARE_CDS_METASPACESHARED_HPP