From c00fef1bbdafbf6409553db32d8ee65407afadc8 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Fri, 13 Jun 2025 13:01:50 +0200 Subject: [PATCH 1/2] Fix --- src/hotspot/share/cds/cds_globals.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/cds/cds_globals.hpp b/src/hotspot/share/cds/cds_globals.hpp index e51dd26ff06c0..730902207f01b 100644 --- a/src/hotspot/share/cds/cds_globals.hpp +++ b/src/hotspot/share/cds/cds_globals.hpp @@ -147,7 +147,7 @@ product(bool, AOTVerifyTrainingData, trueInDebug, DIAGNOSTIC, \ "Verify archived training data") \ \ - product(bool, AOTCompileEagerly, false, DIAGNOSTIC, \ + product(bool, AOTCompileEagerly, false, EXPERIMENTAL, \ "Compile methods as soon as possible") \ \ /* AOT Code flags */ \ From c62f367fc3c31e2e540c856476cf3270d12fe763 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Tue, 17 Jun 2025 10:44:36 +0200 Subject: [PATCH 2/2] Test --- .../appcds/aotCache/AOTCompileEagerly.java | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java diff --git a/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java b/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java new file mode 100644 index 0000000000000..31d537d42222d --- /dev/null +++ b/test/hotspot/jtreg/runtime/cds/appcds/aotCache/AOTCompileEagerly.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + + +/* + * @test + * @summary Sanity-check that eager compilation flags are accepted + * @requires vm.cds + * @requires vm.flagless + * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds/test-classes + * @build Hello + * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar hello.jar Hello + * @run driver AOTCompileEagerly + */ + +import java.io.File; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.helpers.ClassFileInstaller; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class AOTCompileEagerly { + static final String appJar = ClassFileInstaller.getJarPath("hello.jar"); + static final String aotConfigFile = "hello.aotconfig"; + static final String aotCacheFile = "hello.aot"; + static final String helloClass = "Hello"; + + public static void main(String[] args) throws Exception { + ProcessBuilder pb; + OutputAnalyzer out; + + //---------------------------------------------------------------------- + System.out.println("Training Run"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTMode=record", + "-XX:AOTConfiguration=" + aotConfigFile, + "-cp", appJar, helloClass); + + out = CDSTestUtils.executeAndLog(pb, "train"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Assembly Phase"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTMode=create", + "-XX:AOTConfiguration=" + aotConfigFile, + "-XX:AOTCache=" + aotCacheFile, + "-cp", appJar); + out = CDSTestUtils.executeAndLog(pb, "asm"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Production Run with AOTCache defaults"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTCache=" + aotCacheFile, + "-cp", appJar, helloClass); + out = CDSTestUtils.executeAndLog(pb, "prod-default"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Production Run with AOTCache and eager compilation explicitly ON"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTCache=" + aotCacheFile, + "-XX:+UnlockExperimentalVMOptions", + "-XX:+AOTCompileEagerly", + "-cp", appJar, helloClass); + out = CDSTestUtils.executeAndLog(pb, "prod-eager-on"); + out.shouldHaveExitValue(0); + + //---------------------------------------------------------------------- + System.out.println("Production Run with AOTCache and eager compilation explicitly OFF"); + pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-XX:AOTCache=" + aotCacheFile, + "-XX:+UnlockExperimentalVMOptions", + "-XX:-AOTCompileEagerly", + "-cp", appJar, helloClass); + out = CDSTestUtils.executeAndLog(pb, "prod-eager-off"); + out.shouldHaveExitValue(0); + } +}