|
29 | 29 | import java.io.IOException; |
30 | 30 | import java.io.InputStream; |
31 | 31 | import java.io.InputStreamReader; |
32 | | -import java.lang.management.ManagementFactory; |
33 | | -import java.lang.management.OperatingSystemMXBean; |
34 | 32 | import java.lang.reflect.Method; |
35 | 33 | import java.nio.charset.StandardCharsets; |
36 | 34 | import java.nio.file.Files; |
|
58 | 56 | import java.util.function.BiFunction; |
59 | 57 | import java.util.function.Consumer; |
60 | 58 | import java.util.function.Function; |
61 | | -import java.util.function.Supplier; |
62 | 59 | import java.util.jar.Attributes; |
63 | 60 | import java.util.jar.JarFile; |
64 | 61 | import java.util.jar.Manifest; |
@@ -808,11 +805,12 @@ static void ensureDirectoryExists(Path dir) { |
808 | 805 |
|
809 | 806 | private void prepareImageBuildArgs() { |
810 | 807 | addImageBuilderJavaArgs("-Xss10m"); |
811 | | - addImageBuilderJavaArgs(oXms + getXmsValue()); |
812 | | - String xmxVal = getXmxValue(1); |
813 | | - if (!"0".equals(xmxVal)) { |
814 | | - addImageBuilderJavaArgs(oXmx + xmxVal); |
815 | | - } |
| 808 | + |
| 809 | + /* Builder needs at least 2GB of memory. */ |
| 810 | + addImageBuilderJavaArgs("-Xms2g"); |
| 811 | + |
| 812 | + /* Adjust max memory usage depending on availability. */ |
| 813 | + addImageBuilderJavaArgs("-XX:MaxRAMPercentage=" + MemoryUtil.determineMaxRAMPercentage()); |
816 | 814 |
|
817 | 815 | /* Let builder exit on first OutOfMemoryError. */ |
818 | 816 | addImageBuilderJavaArgs("-XX:+ExitOnOutOfMemoryError"); |
@@ -863,27 +861,6 @@ protected static boolean replaceArg(Collection<String> args, String argPrefix, S |
863 | 861 | return elementsRemoved; |
864 | 862 | } |
865 | 863 |
|
866 | | - private static <T> T consolidateArgs(Collection<String> args, String argPrefix, |
867 | | - Function<String, T> fromSuffix, Function<T, String> toSuffix, |
868 | | - Supplier<T> init, BiFunction<T, T, T> combiner) { |
869 | | - T consolidatedValue = null; |
870 | | - boolean needsConsolidate = false; |
871 | | - for (String arg : args) { |
872 | | - if (arg.startsWith(argPrefix)) { |
873 | | - if (consolidatedValue == null) { |
874 | | - consolidatedValue = init.get(); |
875 | | - } else { |
876 | | - needsConsolidate = true; |
877 | | - } |
878 | | - consolidatedValue = combiner.apply(consolidatedValue, fromSuffix.apply(arg.substring(argPrefix.length()))); |
879 | | - } |
880 | | - } |
881 | | - if (consolidatedValue != null && needsConsolidate) { |
882 | | - replaceArg(args, argPrefix, toSuffix.apply(consolidatedValue)); |
883 | | - } |
884 | | - return consolidatedValue; |
885 | | - } |
886 | | - |
887 | 864 | private static LinkedHashSet<String> collectListArgs(Collection<String> args, String argPrefix, String delimiter) { |
888 | 865 | LinkedHashSet<String> allEntries = new LinkedHashSet<>(); |
889 | 866 | for (String arg : args) { |
@@ -1052,14 +1029,7 @@ private int completeImageBuild() { |
1052 | 1029 | } |
1053 | 1030 | } |
1054 | 1031 | } |
1055 | | - /* Perform JavaArgs consolidation - take the maximum of -Xmx, minimum of -Xms */ |
1056 | | - Long xmxValue = consolidateArgs(imageBuilderJavaArgs, oXmx, SubstrateOptionsParser::parseLong, String::valueOf, () -> 0L, Math::max); |
1057 | | - Long xmsValue = consolidateArgs(imageBuilderJavaArgs, oXms, SubstrateOptionsParser::parseLong, String::valueOf, () -> SubstrateOptionsParser.parseLong(getXmsValue()), Math::max); |
1058 | | - if (xmxValue != null) { |
1059 | | - if (Long.compareUnsigned(xmsValue, xmxValue) > 0) { |
1060 | | - replaceArg(imageBuilderJavaArgs, oXms, Long.toUnsignedString(xmxValue)); |
1061 | | - } |
1062 | | - } |
| 1032 | + |
1063 | 1033 | addImageBuilderJavaArgs(customJavaArgs.toArray(new String[0])); |
1064 | 1034 |
|
1065 | 1035 | /* Perform option consolidation of imageBuilderArgs */ |
@@ -2088,26 +2058,6 @@ List<String> getNativeImageArgs() { |
2088 | 2058 | return Stream.concat(getDefaultNativeImageArgs().stream(), config.getBuildArgs().stream()).toList(); |
2089 | 2059 | } |
2090 | 2060 |
|
2091 | | - protected String getXmsValue() { |
2092 | | - return "1g"; |
2093 | | - } |
2094 | | - |
2095 | | - @SuppressWarnings("deprecation") // getTotalPhysicalMemorySize is deprecated after JDK 11 |
2096 | | - private static long getPhysicalMemorySize() { |
2097 | | - OperatingSystemMXBean osMXBean = ManagementFactory.getOperatingSystemMXBean(); |
2098 | | - long totalPhysicalMemorySize = ((com.sun.management.OperatingSystemMXBean) osMXBean).getTotalPhysicalMemorySize(); |
2099 | | - return totalPhysicalMemorySize; |
2100 | | - } |
2101 | | - |
2102 | | - protected String getXmxValue(int maxInstances) { |
2103 | | - Long memMax = Long.divideUnsigned(Long.divideUnsigned(getPhysicalMemorySize(), 10) * 8, maxInstances); |
2104 | | - String maxXmx = "14g"; |
2105 | | - if (Long.compareUnsigned(memMax, SubstrateOptionsParser.parseLong(maxXmx)) >= 0) { |
2106 | | - return maxXmx; |
2107 | | - } |
2108 | | - return Long.toUnsignedString(memMax); |
2109 | | - } |
2110 | | - |
2111 | 2061 | private static boolean isDumbTerm() { |
2112 | 2062 | String term = System.getenv().getOrDefault("TERM", ""); |
2113 | 2063 | return term.isEmpty() || term.equals("dumb") || term.equals("unknown"); |
|
0 commit comments