当我在“Eclipse”IDE 中创建一个新项目时,它突然显示一条警告消息“内存不足错误”。我无法确定原因。如果有人知道原因请告诉我。
6 回答
尝试使用以下参数启动 Eclipse:
eclipse.exe -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m
或根据您的要求证明这些参数的合理性
- 转到您的 Eclipse 设置文件夹
如果您在 Mac OS X 上运行 Eclipse,那么
右键单击
eclipse.app
图标点击
Show Package Contents
打开
eclipse.ini
文件更改以下参数
-Xms512m -Xmx3000m (Hoping your developer box has >4GB of memory)
添加以下参数
-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是我的解决方案。不过,有兴趣看到更多知识渊博的人对此的投入。
- 打开你的 eclipse.ini 文件
- XXMaxPermSize 将为 256m。
- 将值更改为 512m。
- 重新启动你的日食。
- 现在您不会在 Eclipse 中看到任何内存问题。
简要见下文:
前
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
后:
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
你必须使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);