changeset 59296:e25b21095e86

8242524: Use different default CDS archives depending on UseCompressOops Reviewed-by: erikj, iklam, ccheung
author minqi
date Thu, 14 May 2020 14:24:55 -0700
parents 986bbe138394
children 85dc8f4c7f3c
files make/Images.gmk make/scripts/compare.sh src/hotspot/share/memory/filemap.cpp src/hotspot/share/runtime/arguments.cpp src/hotspot/share/runtime/arguments.hpp
diffstat 5 files changed, 46 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/make/Images.gmk	Thu May 14 20:34:18 2020 +0000
+++ b/make/Images.gmk	Thu May 14 14:24:55 2020 -0700
@@ -117,8 +117,10 @@
 ifeq ($(BUILD_CDS_ARCHIVE), true)
   ifeq ($(OPENJDK_TARGET_OS), windows)
     CDS_ARCHIVE := bin/server/classes.jsa
+    CDS_NOCOOPS_ARCHIVE := bin/server/classes_nocoops.jsa
   else
     CDS_ARCHIVE := lib/server/classes.jsa
+    CDS_NOCOOPS_ARCHIVE := lib/server/classes_nocoops.jsa
   endif
 
   $(eval $(call SetupExecute, gen_cds_archive_jdk, \
@@ -127,6 +129,7 @@
       OUTPUT_FILE := $(JDK_IMAGE_DIR)/$(CDS_ARCHIVE), \
       SUPPORT_DIR := $(SUPPORT_OUTPUTDIR)/images/jdk, \
       COMMAND := $(FIXPATH) $(JDK_IMAGE_DIR)/bin/java -Xshare:dump \
+          -XX:SharedArchiveFile=$(JDK_IMAGE_DIR)/$(CDS_ARCHIVE) \
           -Xmx128M -Xms128M $(LOG_INFO), \
   ))
 
@@ -138,10 +141,37 @@
       OUTPUT_FILE := $(JRE_IMAGE_DIR)/$(CDS_ARCHIVE), \
       SUPPORT_DIR := $(SUPPORT_OUTPUTDIR)/images/jre, \
       COMMAND := $(FIXPATH) $(JRE_IMAGE_DIR)/bin/java -Xshare:dump \
+          -XX:SharedArchiveFile=$(JRE_IMAGE_DIR)/$(CDS_ARCHIVE) \
           -Xmx128M -Xms128M $(LOG_INFO), \
   ))
 
   JRE_TARGETS += $(gen_cds_archive_jre)
+
+  $(eval $(call SetupExecute, gen_cds_nocoops_archive_jdk, \
+      WARN := Creating CDS-NOCOOPS archive for jdk image, \
+      DEPS := $(jlink_jdk), \
+      OUTPUT_FILE := $(JDK_IMAGE_DIR)/$(CDS_NOCOOPS_ARCHIVE), \
+      SUPPORT_DIR := $(SUPPORT_OUTPUTDIR)/images/jdk, \
+      COMMAND := $(FIXPATH) $(JDK_IMAGE_DIR)/bin/java -Xshare:dump \
+          -XX:SharedArchiveFile=$(JDK_IMAGE_DIR)/$(CDS_NOCOOPS_ARCHIVE) \
+          -XX:-UseCompressedOops \
+          -Xmx128M -Xms128M $(LOG_INFO), \
+  ))
+
+  JDK_TARGETS += $(gen_cds_nocoops_archive_jdk)
+
+  $(eval $(call SetupExecute, gen_cds_nocoops_archive_jre, \
+      WARN := Creating CDS-NOCOOPS archive for jre image, \
+      DEPS := $(jlink_jre), \
+      OUTPUT_FILE := $(JRE_IMAGE_DIR)/$(CDS_NOCOOPS_ARCHIVE), \
+      SUPPORT_DIR := $(SUPPORT_OUTPUTDIR)/images/jre, \
+      COMMAND := $(FIXPATH) $(JRE_IMAGE_DIR)/bin/java -Xshare:dump \
+          -XX:SharedArchiveFile=$(JRE_IMAGE_DIR)/$(CDS_NOCOOPS_ARCHIVE) \
+          -XX:-UseCompressedOops \
+          -Xmx128M -Xms128M $(LOG_INFO), \
+  ))
+
+  JRE_TARGETS += $(gen_cds_nocoops_archive_jre)
 endif
 
 ################################################################################
--- a/make/scripts/compare.sh	Thu May 14 20:34:18 2020 +0000
+++ b/make/scripts/compare.sh	Thu May 14 14:24:55 2020 -0700
@@ -343,7 +343,7 @@
         ! -name "*.cpl" ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \
         ! -name "*.lib" ! -name "*.jmod" ! -name "*.exe" \
         ! -name "*.obj" ! -name "*.o" ! -name "jspawnhelper" ! -name "*.a" \
-        ! -name "*.tar.gz" ! -name "classes.jsa" ! -name "gtestLauncher" \
+        ! -name "*.tar.gz" ! -name "*.jsa" ! -name "gtestLauncher" \
         ! -name "*.map" \
         | $GREP -v "./bin/"  | $SORT | $FILTER)
 
--- a/src/hotspot/share/memory/filemap.cpp	Thu May 14 20:34:18 2020 +0000
+++ b/src/hotspot/share/memory/filemap.cpp	Thu May 14 14:24:55 2020 -0700
@@ -1069,6 +1069,7 @@
   } else {
     _full_path = Arguments::GetSharedDynamicArchivePath();
   }
+  log_info(cds)("trying to map %s", _full_path);
   int fd = os::open(_full_path, O_RDONLY | O_BINARY, 0);
   if (fd < 0) {
     if (errno == ENOENT) {
--- a/src/hotspot/share/runtime/arguments.cpp	Thu May 14 20:34:18 2020 +0000
+++ b/src/hotspot/share/runtime/arguments.cpp	Thu May 14 14:24:55 2020 -0700
@@ -3519,13 +3519,21 @@
   return status;
 }
 
-void Arguments::set_shared_spaces_flags() {
+jint Arguments::set_shared_spaces_flags_and_archive_paths() {
   if (DumpSharedSpaces) {
     if (RequireSharedSpaces) {
       warning("Cannot dump shared archive while using shared archive");
     }
     UseSharedSpaces = false;
   }
+#if INCLUDE_CDS
+  // Initialize shared archive paths which could include both base and dynamic archive paths
+  // This must be after set_ergonomics_flags() called so flag UseCompressedOops is set properly.
+  if (!init_shared_archive_paths()) {
+    return JNI_ENOMEM;
+  }
+#endif  // INCLUDE_CDS
+  return JNI_OK;
 }
 
 #if INCLUDE_CDS
@@ -3541,7 +3549,8 @@
   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, "%s%sclasses.jsa",
+  jio_snprintf(default_archive_path, len,
+               UseCompressedOops ? "%s%sclasses.jsa": "%s%sclasses_nocoops.jsa",
                jvm_path, os::file_separator());
   return default_archive_path;
 }
@@ -3986,13 +3995,6 @@
     return result;
   }
 
-#if INCLUDE_CDS
-  // Initialize shared archive paths which could include both base and dynamic archive paths
-  if (!init_shared_archive_paths()) {
-    return JNI_ENOMEM;
-  }
-#endif
-
   // Delay warning until here so that we've had a chance to process
   // the -XX:-PrintWarnings flag
   if (needs_hotspotrc_warning) {
@@ -4080,7 +4082,8 @@
 
   GCConfig::arguments()->initialize();
 
-  set_shared_spaces_flags();
+  result = set_shared_spaces_flags_and_archive_paths();
+  if (result != JNI_OK) return result;
 
   // Initialize Metaspace flags and alignments
   Metaspace::ergo_initialize();
--- a/src/hotspot/share/runtime/arguments.hpp	Thu May 14 20:34:18 2020 +0000
+++ b/src/hotspot/share/runtime/arguments.hpp	Thu May 14 14:24:55 2020 -0700
@@ -370,7 +370,7 @@
   static void set_use_compressed_oops();
   static void set_use_compressed_klass_ptrs();
   static jint set_ergonomics_flags();
-  static void set_shared_spaces_flags();
+  static jint set_shared_spaces_flags_and_archive_paths();
   // limits the given memory size by the maximum amount of memory this process is
   // currently allowed to allocate or reserve.
   static julong limit_by_allocatable_memory(julong size);