From ac099ff89f1fbd9087171b00f84efed2f74a6c04 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 23 Jan 2017 17:27:42 +0300 Subject: [PATCH] [ui] perm. gen -> metaspace in OOME dialog (IDEA-165796) --- .../diagnostic/DefaultIdeaErrorLogger.java | 4 +- ...a => DropAnOutOfMetaspaceErrorAction.java} | 11 +++-- .../diagnostic/OutOfMemoryDialog.form | 8 ++-- .../diagnostic/OutOfMemoryDialog.java | 25 +++++++----- .../com/intellij/diagnostic/VMOptions.java | 2 +- .../src/messages/ActionsBundle.properties | 2 +- .../src/idea/PlatformActions.xml | 2 +- .../intellij/diagnostic/VMOptionsTest.java | 40 +++++++++---------- .../com/intellij/spellchecker/jetbrains.dic | 1 + 9 files changed, 49 insertions(+), 46 deletions(-) rename platform/platform-impl/src/com/intellij/diagnostic/{DropAnOutOfPermGenMemoryErrorAction.java => DropAnOutOfMetaspaceErrorAction.java} (71%) diff --git a/platform/platform-impl/src/com/intellij/diagnostic/DefaultIdeaErrorLogger.java b/platform/platform-impl/src/com/intellij/diagnostic/DefaultIdeaErrorLogger.java index ba429ca53cbc..358b8a7e3e3c 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/DefaultIdeaErrorLogger.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/DefaultIdeaErrorLogger.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -107,7 +107,7 @@ public class DefaultIdeaErrorLogger implements ErrorLogger { if (t instanceof OutOfMemoryError) { if (message != null && message.contains("unable to create new native thread")) return null; - if (message != null && message.contains("PermGen")) return MemoryKind.PERM_GEN; + if (message != null && message.contains("Metaspace")) return MemoryKind.METASPACE; return MemoryKind.HEAP; } diff --git a/platform/platform-impl/src/com/intellij/diagnostic/DropAnOutOfPermGenMemoryErrorAction.java b/platform/platform-impl/src/com/intellij/diagnostic/DropAnOutOfMetaspaceErrorAction.java similarity index 71% rename from platform/platform-impl/src/com/intellij/diagnostic/DropAnOutOfPermGenMemoryErrorAction.java rename to platform/platform-impl/src/com/intellij/diagnostic/DropAnOutOfMetaspaceErrorAction.java index 3930352dd536..99e092dfbfc4 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/DropAnOutOfPermGenMemoryErrorAction.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/DropAnOutOfMetaspaceErrorAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,13 +18,12 @@ package com.intellij.diagnostic; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.DumbAwareAction; -@SuppressWarnings({"HardCodedStringLiteral"}) -public class DropAnOutOfPermGenMemoryErrorAction extends DumbAwareAction { - public DropAnOutOfPermGenMemoryErrorAction() { - super ("Drop an perm gen OutOfMemoryError"); +public class DropAnOutOfMetaspaceErrorAction extends DumbAwareAction { + public DropAnOutOfMetaspaceErrorAction() { + super ("Drop an OutOfMemoryError in Metaspace"); } public void actionPerformed(AnActionEvent e) { - throw new OutOfMemoryError("foo PermGen foo"); + throw new OutOfMemoryError("foo Metaspace foo"); } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.form b/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.form index 200c63c556da..0ff7ca23d4a3 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.form +++ b/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.form @@ -58,7 +58,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -83,7 +83,7 @@ - + diff --git a/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java b/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java index ac868c36a1c8..b30fc65c23c0 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java @@ -32,7 +32,6 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.ActionEvent; import java.io.File; -import java.util.Arrays; public class OutOfMemoryDialog extends DialogWrapper { private final MemoryKind myMemoryKind; @@ -44,10 +43,10 @@ public class OutOfMemoryDialog extends DialogWrapper { private JTextField myHeapSizeField; private JBLabel myHeapUnitsLabel; private JBLabel myHeapCurrentValueLabel; - private JBLabel myPermGenSizeLabel; - private JTextField myPermGenSizeField; - private JBLabel myPermGenUnitsLabel; - private JBLabel myPermGenCurrentValueLabel; + private JBLabel myMetaspaceSizeLabel; + private JTextField myMetaspaceSizeField; + private JBLabel myMetaspaceUnitsLabel; + private JBLabel myMetaspaceCurrentValueLabel; private JBLabel myCodeCacheSizeLabel; private JTextField myCodeCacheSizeField; private JBLabel myCodeCacheUnitsLabel; @@ -75,12 +74,10 @@ public class OutOfMemoryDialog extends DialogWrapper { else { mySettingsFileHintLabel.setVisible(false); myHeapSizeField.setEnabled(false); - myPermGenSizeField.setEnabled(false); + myMetaspaceSizeField.setEnabled(false); myCodeCacheSizeField.setEnabled(false); } - Arrays.asList(myPermGenSizeLabel, myPermGenSizeField, myPermGenUnitsLabel, myPermGenCurrentValueLabel).forEach(c -> c.setVisible(false)); - myContinueAction = new DialogWrapperAction(DiagnosticBundle.message("diagnostic.out.of.memory.continue")) { @Override protected void doAction(ActionEvent e) { @@ -107,7 +104,7 @@ public class OutOfMemoryDialog extends DialogWrapper { }; configControls(MemoryKind.HEAP, myHeapSizeLabel, myHeapSizeField, myHeapUnitsLabel, myHeapCurrentValueLabel); - configControls(MemoryKind.PERM_GEN, myPermGenSizeLabel, myPermGenSizeField, myPermGenUnitsLabel, myPermGenCurrentValueLabel); + configControls(MemoryKind.METASPACE, myMetaspaceSizeLabel, myMetaspaceSizeField, myMetaspaceUnitsLabel, myMetaspaceCurrentValueLabel); configControls(MemoryKind.CODE_CACHE, myCodeCacheSizeLabel, myCodeCacheSizeField, myCodeCacheUnitsLabel, myCodeCacheCurrentValueLabel); init(); @@ -141,6 +138,12 @@ public class OutOfMemoryDialog extends DialogWrapper { } catch (NumberFormatException ignored) { } + try { + int codeCacheSize = Integer.parseInt(myMetaspaceSizeField.getText()); + VMOptions.writeOption(MemoryKind.METASPACE, codeCacheSize); + } + catch (NumberFormatException ignored) { } + try { int codeCacheSize = Integer.parseInt(myCodeCacheSizeField.getText()); VMOptions.writeOption(MemoryKind.CODE_CACHE, codeCacheSize); @@ -180,7 +183,7 @@ public class OutOfMemoryDialog extends DialogWrapper { @SuppressWarnings("Duplicates") private void enableControls(boolean enabled) { myHeapSizeField.setEnabled(enabled); - myPermGenSizeField.setEnabled(enabled); + myMetaspaceSizeField.setEnabled(enabled); myCodeCacheSizeField.setEnabled(enabled); myShutdownAction.setEnabled(enabled); myContinueAction.setEnabled(enabled); @@ -201,7 +204,7 @@ public class OutOfMemoryDialog extends DialogWrapper { @Override public JComponent getPreferredFocusedComponent() { - return myMemoryKind == MemoryKind.PERM_GEN ? myPermGenSizeField : + return myMemoryKind == MemoryKind.METASPACE ? myMetaspaceSizeField : myMemoryKind == MemoryKind.CODE_CACHE ? myCodeCacheSizeField : myHeapSizeField; } diff --git a/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java b/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java index 9e795d442703..0b5c694a73a2 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java @@ -38,7 +38,7 @@ public class VMOptions { private static final Logger LOG = Logger.getInstance("#com.intellij.diagnostic.VMOptions"); public enum MemoryKind { - HEAP("Xmx", ""), PERM_GEN("XX:MaxPermSize", "="), CODE_CACHE("XX:ReservedCodeCacheSize", "="); + HEAP("Xmx", ""), PERM_GEN("XX:MaxPermSize", "="), METASPACE("XX:MaxMetaspaceSize", "="), CODE_CACHE("XX:ReservedCodeCacheSize", "="); public final String optionName; public final String option; diff --git a/platform/platform-resources-en/src/messages/ActionsBundle.properties b/platform/platform-resources-en/src/messages/ActionsBundle.properties index 241009d155ec..cd25405d002c 100644 --- a/platform/platform-resources-en/src/messages/ActionsBundle.properties +++ b/platform/platform-resources-en/src/messages/ActionsBundle.properties @@ -846,7 +846,7 @@ action.LocalVcs.ShowStatistics.description=Show Local VCS statistics action.LocalVcs.ShowRepHistory.text=Repository History action.DropAnError.text=Drop An Error action.DropAnOutOfMemoryError.text=Drop An OutOfMemoryError -action.DropAnOutOfPermGenMemoryError.text=Drop An PermGen OutOfMemoryError +action.DropAnOutOfMetaspaceError.text=Drop an OutOfMemoryError in Metaspace action.DumpInspectionDescriptions.text=Dump Inspection Descriptions action.DumpIntentionsDescriptions.text=Dump Intentions Descriptions action.ShowUserActivities.text=Show Activities diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index ad1bb10e5869..dcdc0deb920e 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -709,7 +709,7 @@ - + diff --git a/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java b/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java index 2bf78290f525..ea516b4d2e59 100644 --- a/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java +++ b/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java @@ -36,7 +36,7 @@ public class VMOptionsTest { @Before public void setUp() throws IOException { myFile = myTempDir.newFile("vmoptions.txt"); - FileUtil.writeToFile(myFile, "-Xmx512m\n-XX:MaxPermSize=128m"); + FileUtil.writeToFile(myFile, "-Xmx512m\n-XX:MaxMetaspaceSize=128m"); System.setProperty("jb.vmOptionsFile", myFile.getPath()); } @@ -48,7 +48,7 @@ public class VMOptionsTest { @Test public void testReading() { assertEquals(512, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); - assertEquals(128, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); + assertEquals(128, VMOptions.readOption(VMOptions.MemoryKind.METASPACE, false)); } @Test @@ -56,50 +56,50 @@ public class VMOptionsTest { FileUtil.writeToFile(myFile, ""); assertEquals(-1, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); - assertEquals(-1, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); + assertEquals(-1, VMOptions.readOption(VMOptions.MemoryKind.METASPACE, false)); } @Test public void testReadingKilos() throws IOException { - FileUtil.writeToFile(myFile, "-Xmx512000k -XX:MaxPermSize=128000K -XX:ReservedCodeCacheSize=256000K"); + FileUtil.writeToFile(myFile, "-Xmx512000k -XX:MaxMetaspaceSize=128000K -XX:ReservedCodeCacheSize=256000K"); assertEquals(512000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); - assertEquals(128000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); + assertEquals(128000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.METASPACE, false)); assertEquals(256000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.CODE_CACHE, false)); } @Test public void testReadingGigs() throws IOException { - FileUtil.writeToFile(myFile, "-Xmx512g\n-XX:MaxPermSize=128G"); + FileUtil.writeToFile(myFile, "-Xmx512g\n-XX:MaxMetaspaceSize=128G"); assertEquals(512 * 1024, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); - assertEquals(128 * 1024, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); + assertEquals(128 * 1024, VMOptions.readOption(VMOptions.MemoryKind.METASPACE, false)); } @Test public void testReadingWithoutUnit() throws IOException { - FileUtil.writeToFile(myFile, "-Xmx512\n-XX:MaxPermSize=128"); + FileUtil.writeToFile(myFile, "-Xmx512\n-XX:MaxMetaspaceSize=128"); assertEquals(512, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); - assertEquals(128, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); + assertEquals(128, VMOptions.readOption(VMOptions.MemoryKind.METASPACE, false)); } @Test public void testWriting() throws IOException { VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); - VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 512); + VMOptions.writeOption(VMOptions.MemoryKind.METASPACE, 512); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxPermSize=512m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxMetaspaceSize=512m"); } @Test public void testWritingPreservingLocation() throws IOException { - FileUtil.writeToFile(myFile, "-someOption\n-Xmx512m\n-XX:MaxPermSize=128m\n-anotherOption"); + FileUtil.writeToFile(myFile, "-someOption\n-Xmx512m\n-XX:MaxMetaspaceSize=128m\n-anotherOption"); VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); - VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); + VMOptions.writeOption(VMOptions.MemoryKind.METASPACE, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption -Xmx1024m -XX:MaxPermSize=256m -anotherOption"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption -Xmx1024m -XX:MaxMetaspaceSize=256m -anotherOption"); } @Test @@ -107,10 +107,10 @@ public class VMOptionsTest { FileUtil.writeToFile(myFile, "-someOption"); VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); - VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); + VMOptions.writeOption(VMOptions.MemoryKind.METASPACE, 256); VMOptions.writeOption(VMOptions.MemoryKind.CODE_CACHE, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption -Xmx1024m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=256m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption -Xmx1024m -XX:MaxMetaspaceSize=256m -XX:ReservedCodeCacheSize=256m"); } @Test @@ -118,9 +118,9 @@ public class VMOptionsTest { FileUtil.setReadOnlyAttribute(myFile.getPath(), true); VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); - VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); + VMOptions.writeOption(VMOptions.MemoryKind.METASPACE, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxPermSize=256m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxMetaspaceSize=256m"); } @Test @@ -128,8 +128,8 @@ public class VMOptionsTest { FileUtil.delete(myFile); VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); - VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); + VMOptions.writeOption(VMOptions.MemoryKind.METASPACE, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxPermSize=256m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxMetaspaceSize=256m"); } } \ No newline at end of file diff --git a/spellchecker/src/com/intellij/spellchecker/jetbrains.dic b/spellchecker/src/com/intellij/spellchecker/jetbrains.dic index 658f80ae1aa1..332527c40232 100644 --- a/spellchecker/src/com/intellij/spellchecker/jetbrains.dic +++ b/spellchecker/src/com/intellij/spellchecker/jetbrains.dic @@ -344,6 +344,7 @@ mediumint mediumtext metadata metas +metaspace middleint middleware millis