diff --git a/platform/platform-impl/src/com/intellij/diagnostic/MemorySizeConfigurator.kt b/platform/platform-impl/src/com/intellij/diagnostic/MemorySizeConfigurator.kt index 51ce9cef7c7f..a67cbc54743a 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/MemorySizeConfigurator.kt +++ b/platform/platform-impl/src/com/intellij/diagnostic/MemorySizeConfigurator.kt @@ -17,7 +17,12 @@ class MemorySizeConfigurator : StartupActivity { override fun runActivity(project: Project) { if (ApplicationManager.getApplication().isUnitTestMode) return - val currentXmx = VMOptions.readOption(VMOptions.MemoryKind.HEAP, true) + var currentXmx = VMOptions.readOption(VMOptions.MemoryKind.HEAP, true) + if (currentXmx < 0) currentXmx = VMOptions.readOption(VMOptions.MemoryKind.HEAP, false) + if (currentXmx < 0) { + // Don't know how much -Xmx we have + return + } if (currentXmx > 750) { // Memory has already been adjusted by the user manually return @@ -31,12 +36,14 @@ class MemorySizeConfigurator : StartupActivity { val newXmx = MemorySizeConfiguratorService.getInstance().getSuggestedMemorySize(currentXmx, totalPhysicalMemory.toInt()) - val currentXms = VMOptions.readOption(VMOptions.MemoryKind.MIN_HEAP, true) - if (newXmx < currentXms) return + var currentXms = VMOptions.readOption(VMOptions.MemoryKind.MIN_HEAP, true) + if (currentXms < 0) currentXms = VMOptions.readOption(VMOptions.MemoryKind.MIN_HEAP, false) + + if (currentXms < 0 || newXmx < currentXms) return VMOptions.writeOption(VMOptions.MemoryKind.HEAP, newXmx) PropertiesComponent.getInstance().setValue("ide.memory.adjusted", true) - LOG.info("Physical memory ${totalPhysicalMemory}M, -Xmx adjusted to ${newXmx}M") + LOG.info("Physical memory ${totalPhysicalMemory}M, minimum memory size ${currentXms}M, -Xmx adjusted from ${currentXmx}M to ${newXmx}M") } companion object {