From 8c64535bb1726ba2712fe708ded9c36fc04797eb Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 16 Jul 2018 13:23:34 +0200 Subject: [PATCH] infer forked groovyc's Xmx from build process Xmx (IDEA-195598) --- .../src/org/jetbrains/jps/incremental/Utils.java | 12 ++++++++++++ .../jps/incremental/java/JavaBuilder.java | 14 +------------- .../jps/incremental/groovy/ForkedGroovyc.java | 3 ++- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java index e5e259bfd280..7570335a3f85 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java @@ -101,4 +101,16 @@ public class Utils { public static String formatDuration(long duration) { return StringUtil.formatDuration(duration); } + + public static int suggestForkedCompilerHeapSize() { + //final JpsProject project = context.getProjectDescriptor().getProject(); + //final JpsJavaCompilerConfiguration config = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(project); + //final JpsJavaCompilerOptions options = config.getCurrentCompilerOptions(); + //return options.MAXIMUM_HEAP_SIZE; + final int maxMbytes = (int)(Runtime.getRuntime().maxMemory() / 1048576L); + if (maxMbytes < 0) { + return -1; // in case of int overflow, return -1 to let VM choose the heap size + } + return Math.max(maxMbytes * 75 / 100, 256); // minimum 256 Mb, maximum 75% from JPS max heap size + } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index e562c9ed5370..20df701e7861 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -457,7 +457,7 @@ public class JavaBuilder extends ModuleLevelBuilder { final ExternalJavacManager server = ensureJavacServerStarted(context); rc = server.forkJavac( forkSdk.getFirst(), - getExternalJavacHeapSize(), + Utils.suggestForkedCompilerHeapSize(), vmOptions, options, platformCp, classPath, modulePath, sourcePath, files, outs, diagnosticSink, classesConsumer, compilingTool, context.getCancelStatus() ); @@ -484,18 +484,6 @@ public class JavaBuilder extends ModuleLevelBuilder { } } - private static int getExternalJavacHeapSize() { - //final JpsProject project = context.getProjectDescriptor().getProject(); - //final JpsJavaCompilerConfiguration config = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(project); - //final JpsJavaCompilerOptions options = config.getCurrentCompilerOptions(); - //return options.MAXIMUM_HEAP_SIZE; - final int maxMbytes = (int)(Runtime.getRuntime().maxMemory() / 1048576L); - if (maxMbytes < 0) { - return -1; // in case of int overflow, return -1 to let VM choose the heap size - } - return Math.max(maxMbytes * 75 / 100, 256); // minimum 256 Mb, maximum 75% from JPS max heap size - } - @Nullable public static String validateCycle(CompileContext context, ModuleChunk chunk) { final JpsJavaExtensionService javaExt = JpsJavaExtensionService.getInstance(); diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/ForkedGroovyc.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/ForkedGroovyc.java index b4823baec5b4..2954ec189391 100644 --- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/ForkedGroovyc.java +++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/ForkedGroovyc.java @@ -31,6 +31,7 @@ import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.cmdline.ClasspathBootstrap; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.incremental.ExternalProcessUtil; +import org.jetbrains.jps.incremental.Utils; import org.jetbrains.jps.model.java.JpsJavaSdkType; import org.jetbrains.jps.model.library.sdk.JpsSdk; import org.jetbrains.jps.service.SharedThreadPool; @@ -74,7 +75,7 @@ class ForkedGroovyc implements GroovycFlavor { JpsGroovySettings settings = JpsGroovycRunner.getGroovyCompilerSettings(context); List vmParams = ContainerUtilRt.newArrayList(); - vmParams.add("-Xmx" + System.getProperty("groovyc.heap.size", settings.heapSize) + "m"); + vmParams.add("-Xmx" + System.getProperty("groovyc.heap.size", String.valueOf(Utils.suggestForkedCompilerHeapSize())) + "m"); vmParams.add("-Dfile.encoding=" + System.getProperty("file.encoding")); //vmParams.add("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5239");