diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 0c009e2e8de9..126913852898 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -18,6 +18,7 @@ package com.intellij.compiler.server; import com.intellij.ProjectTopics; import com.intellij.application.options.PathMacrosImpl; import com.intellij.compiler.CompilerWorkspaceConfiguration; +import com.intellij.compiler.impl.javaCompiler.javac.JavacConfiguration; import com.intellij.compiler.server.impl.CompileServerClasspathManager; import com.intellij.execution.ExecutionAdapter; import com.intellij.execution.ExecutionException; @@ -733,7 +734,14 @@ public class BuildManager implements ApplicationComponent{ cmdLine.setExePath(vmExecutablePath); //cmdLine.addParameter("-XX:MaxPermSize=150m"); //cmdLine.addParameter("-XX:ReservedCodeCacheSize=64m"); - final int heapSize = config.COMPILER_PROCESS_HEAP_SIZE; + int heapSize = config.COMPILER_PROCESS_HEAP_SIZE; + + // todo: remove when old make implementation is removed + if (heapSize == CompilerWorkspaceConfiguration.DEFAULT_COMPILE_PROCESS_HEAP_SIZE) { + // check if javac is set to use larger heap, and if so, use it. + heapSize = Math.max(heapSize, JavacConfiguration.getOptions(project, JavacConfiguration.class).MAXIMUM_HEAP_SIZE); + } + final int xms = heapSize / 2; if (xms > 32) { cmdLine.addParameter("-Xms" + xms + "m"); diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index 4ca2921f9b73..813b8915782e 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -31,6 +31,8 @@ import com.intellij.util.xmlb.XmlSerializerUtil; )} ) public class CompilerWorkspaceConfiguration implements PersistentStateComponent { + public static final int DEFAULT_COMPILE_PROCESS_HEAP_SIZE = 700; + public static final String DEFAULT_COMPILE_PROCESS_VM_OPTIONS = "-XX:MaxPermSize=150m"; public boolean AUTO_SHOW_ERRORS_IN_EDITOR = true; @Deprecated public boolean CLOSE_MESSAGE_VIEW_IF_SUCCESS = true; @@ -38,8 +40,8 @@ public class CompilerWorkspaceConfiguration implements PersistentStateComponent< public boolean USE_COMPILE_SERVER = true; public boolean MAKE_PROJECT_ON_SAVE = false; public boolean PARALLEL_COMPILATION = true; - public int COMPILER_PROCESS_HEAP_SIZE = 700; - public String COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS = "-XX:MaxPermSize=150m"; + public int COMPILER_PROCESS_HEAP_SIZE = DEFAULT_COMPILE_PROCESS_HEAP_SIZE; + public String COMPILER_PROCESS_ADDITIONAL_VM_OPTIONS = DEFAULT_COMPILE_PROCESS_VM_OPTIONS; public static CompilerWorkspaceConfiguration getInstance(Project project) { return ServiceManager.getService(project, CompilerWorkspaceConfiguration.class);