eclipse中的内存不足错误。为什么?

当我在“Eclipse”IDE中创建一个新项目时。它突然显示一条警告消息“Out of memory error”。我无法确定原因。 如果有人知道原因请告诉我。

尝试使用以下参数启动eclipse:

eclipse.exe -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m 

或者根据您的要求certificate这些参数

  1. 转到Eclipse安装文件夹
  2. 如果您在Mac OS X上运行Eclipse,那么

    右键单击eclipse.app图标

    单击“ Show Package Contents

  3. 打开eclipse.ini文件

  4. 更改以下参数

     -Xms512m -Xmx3000m (Hoping your developer box has >4GB of memory) 
  5. 添加以下参数

     -XX:PermSize=256m -XX:MaxPermSize=512m 

最明显的解释是你真的失去了记忆。 在这种情况下,使用更大的堆启动Eclipse应该会有所帮助

  -vmargs -Xmx256M 

改变256M,看看哪些适合你。

如果您只有几个简单的项目,我不希望看到这个问题。 如果您正在使用其他插件,那么可以想象您可能需要增加所需的堆数量。

不确定是否与您的问题相关,但我在使用OpenJDK 7的Swing项目时遇到了类似的问题。

经过几个循环的启动( Run按钮)和关闭( 'X' / Alt+F4 )我的应用程序后,我在控制台中出现了这个错误:

 Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:691) at sun.awt.AWTAutoShutdown.activateBlockerThread(AWTAutoShutdown.java:334) at sun.awt.AWTAutoShutdown.notifyPeerMapUpdated(AWTAutoShutdown.java:215) at sun.awt.AWTAutoShutdown.registerPeer(AWTAutoShutdown.java:348) at sun.awt.SunToolkit.targetCreatedPeer(SunToolkit.java:313) at sun.awt.X11.XToolkit.createFrame(XToolkit.java:410) at java.awt.Frame.addNotify(Frame.java:477) at java.awt.Window.show(Window.java:1031) at java.awt.Component.show(Component.java:1651) at java.awt.Component.setVisible(Component.java:1603) at java.awt.Window.setVisible(Window.java:1014) at tool.BAT.main(BAT.java:11) 

有时,我有另一种错误:

 Error occurred during initialization of VM java.lang.OutOfMemoryError: unable to create new native thread 

然后,如果我再次尝试运行它,Java崩溃了:

 # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x0000000000000000, pid=30388, tid=139776854689536 # # JRE version: 7.0_07-b30 # Java VM: OpenJDK 64-Bit Server VM (23.2-b09 mixed mode linux-amd64 compressed oops) # Problematic frame: # C 0x0000000000000000 # # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # # An error report file with more information is saved as: # /home/mcmlxxxvi/workspace/bat/hs_err_pid30388.log # # If you would like to submit a bug report, please include # instructions on how to reproduce the bug and visit: # http://icedtea.classpath.org/bugzilla # 

top揭示了问题的原因(注意虚拟内存使用情况):

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30619 mcmlxxxv 20 0 3271m 390m 45m S 2.0 13.0 0:38.88 java 30667 mcmlxxxv 20 0 2172m 35m 12m S 0.3 1.2 0:01.00 java 30688 mcmlxxxv 20 0 2172m 35m 12m S 0.3 1.2 0:00.96 java 30710 mcmlxxxv 20 0 2172m 35m 12m S 0.0 1.2 0:00.97 java 

这些都是我申请的所有实例,尚未结束。 仍然不确定为什么每个实例分配了如此多的虚拟内存 – 可能有一些选择。 (顺便说一下,我有3GiB的物理内存)。

这是我的main()方法:

 public static void main(String[] args) { JFrame frame = new JFrame(); //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setVisible(true); } 

我在教程中看到了注释行,并专门禁用它以查看会发生什么。 发生的事情是它默认为HIDE_ON_CLOSE ,它没有关闭和处理框架。

setDefaultCloseOperation设置为EXIT_ON_CLOSE是我的解决方案。 尽管如此,有兴趣看到更多知识渊博的人的意见。