From f40b349dccdceda75f2325c67e9129c90ab3298a Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Tue, 10 Oct 2017 13:33:39 +0200 Subject: [PATCH] 8188312: Use CDS if present when running the Boot JDK during build Reviewed-by: iklam, erikj --- make/autoconf/boot-jdk.m4 | 30 ++++++++++- make/autoconf/generated-configure.sh | 78 +++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 3 deletions(-) diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4 index 4c307ccb122..2e83199c279 100644 --- a/make/autoconf/boot-jdk.m4 +++ b/make/autoconf/boot-jdk.m4 @@ -325,6 +325,27 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], fi AC_MSG_CHECKING([if Boot JDK is 32 or 64 bits]) AC_MSG_RESULT([$BOOT_JDK_BITS]) + + # Try to enable CDS + AC_MSG_CHECKING([for local Boot JDK Class Data Sharing (CDS)]) + BOOT_JDK_CDS_ARCHIVE=$CONFIGURESUPPORT_OUTPUTDIR/classes.jsa + ADD_JVM_ARG_IF_OK([-XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE],boot_jdk_cds_args,[$JAVA]) + + if test "x$boot_jdk_cds_args" != x; then + # Try creating a CDS archive + "$JAVA" $boot_jdk_cds_args -Xshare:dump > /dev/null 2>&1 + if test $? -eq 0; then + BOOTJDK_USE_LOCAL_CDS=true + AC_MSG_RESULT([yes, created]) + else + # Generation failed, don't use CDS. + BOOTJDK_USE_LOCAL_CDS=false + AC_MSG_RESULT([no, creation failed]) + fi + else + BOOTJDK_USE_LOCAL_CDS=false + AC_MSG_RESULT([no, -XX:SharedArchiveFile not supported]) + fi ]) AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], @@ -346,6 +367,14 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], # Force en-US environment ADD_JVM_ARG_IF_OK([-Duser.language=en -Duser.country=US],boot_jdk_jvmargs,[$JAVA]) + if test "x$BOOTJDK_USE_LOCAL_CDS" = xtrue; then + # Use our own CDS archive + ADD_JVM_ARG_IF_OK([$boot_jdk_cds_args -Xshare:auto],boot_jdk_jvmargs,[$JAVA]) + else + # Otherwise optimistically use the system-wide one, if one is present + ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA]) + fi + # Apply user provided options. ADD_JVM_ARG_IF_OK([$with_boot_jdk_jvmargs],boot_jdk_jvmargs,[$JAVA]) @@ -355,7 +384,6 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], JAVA_FLAGS=$boot_jdk_jvmargs AC_SUBST(JAVA_FLAGS) - AC_MSG_CHECKING([flags for boot jdk java command for big workloads]) # Starting amount of heap memory. diff --git a/make/autoconf/generated-configure.sh b/make/autoconf/generated-configure.sh index ebf810737ec..e5ca524658c 100644 --- a/make/autoconf/generated-configure.sh +++ b/make/autoconf/generated-configure.sh @@ -5117,7 +5117,7 @@ VS_SDK_PLATFORM_NAME_2013= #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1506397140 +DATE_WHEN_GENERATED=1507635096 ############################################################################### # @@ -31483,6 +31483,45 @@ $as_echo_n "checking if Boot JDK is 32 or 64 bits... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_BITS" >&5 $as_echo "$BOOT_JDK_BITS" >&6; } + # Try to enable CDS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local Boot JDK Class Data Sharing (CDS)" >&5 +$as_echo_n "checking for local Boot JDK Class Data Sharing (CDS)... " >&6; } + BOOT_JDK_CDS_ARCHIVE=$CONFIGURESUPPORT_OUTPUTDIR/classes.jsa + + $ECHO "Check if jvm arg is ok: -XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE" >&5 + $ECHO "Command: $JAVA -XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE -version" >&5 + OUTPUT=`$JAVA -XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_cds_args="$boot_jdk_cds_args -XX:+UnlockDiagnosticVMOptions -XX:-VerifySharedSpaces -XX:SharedArchiveFile=$BOOT_JDK_CDS_ARCHIVE" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + + if test "x$boot_jdk_cds_args" != x; then + # Try creating a CDS archive + "$JAVA" $boot_jdk_cds_args -Xshare:dump > /dev/null 2>&1 + if test $? -eq 0; then + BOOTJDK_USE_LOCAL_CDS=true + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, created" >&5 +$as_echo "yes, created" >&6; } + else + # Generation failed, don't use CDS. + BOOTJDK_USE_LOCAL_CDS=false + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, creation failed" >&5 +$as_echo "no, creation failed" >&6; } + fi + else + BOOTJDK_USE_LOCAL_CDS=false + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, -XX:SharedArchiveFile not supported" >&5 +$as_echo "no, -XX:SharedArchiveFile not supported" >&6; } + fi + # Check whether --with-build-jdk was given. @@ -66232,6 +66271,42 @@ $as_echo_n "checking flags for boot jdk java command ... " >&6; } fi + if test "x$BOOTJDK_USE_LOCAL_CDS" = xtrue; then + # Use our own CDS archive + + $ECHO "Check if jvm arg is ok: $boot_jdk_cds_args -Xshare:auto" >&5 + $ECHO "Command: $JAVA $boot_jdk_cds_args -Xshare:auto -version" >&5 + OUTPUT=`$JAVA $boot_jdk_cds_args -Xshare:auto -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs $boot_jdk_cds_args -Xshare:auto" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + else + # Otherwise optimistically use the system-wide one, if one is present + + $ECHO "Check if jvm arg is ok: -Xshare:auto" >&5 + $ECHO "Command: $JAVA -Xshare:auto -version" >&5 + OUTPUT=`$JAVA -Xshare:auto -version 2>&1` + FOUND_WARN=`$ECHO "$OUTPUT" | $GREP -i warn` + FOUND_VERSION=`$ECHO $OUTPUT | $GREP " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xshare:auto" + JVM_ARG_OK=true + else + $ECHO "Arg failed:" >&5 + $ECHO "$OUTPUT" >&5 + JVM_ARG_OK=false + fi + + fi + # Apply user provided options. $ECHO "Check if jvm arg is ok: $with_boot_jdk_jvmargs" >&5 @@ -66256,7 +66331,6 @@ $as_echo "$boot_jdk_jvmargs" >&6; } JAVA_FLAGS=$boot_jdk_jvmargs - { $as_echo "$as_me:${as_lineno-$LINENO}: checking flags for boot jdk java command for big workloads" >&5 $as_echo_n "checking flags for boot jdk java command for big workloads... " >&6; }