简体   繁体   English

在 eclipse 中出现 memory 错误。为什么?

[英]Out of memory error in eclipse.why?

When i create a new project in "Eclipse" IDE.Suddenly it shows an alert message "Out of memory error".I cannot identify the reason.当我在“Eclipse”IDE 中创建一个新项目时,它突然显示一条警告消息“Out of memory error”。我无法确定原因。 If any one know the reason please tell me.如果有人知道原因请告诉我。

Try to start eclipse with follow paramenters:尝试使用以下参数启动 eclipse:

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

Or justify these parameters for your requirements或者根据您的要求证明这些参数的合理性

  1. Go to your Eclipse setup folder转到您的 Eclipse 安装文件夹
  2. If you are running Eclipse on Mac OS X then如果您在 Mac OS X 上运行 Eclipse,那么

    Right click on eclipse.app icon右键单击eclipse.app图标

    Click on Show Package Contents单击Show Package Contents

  3. Open eclipse.ini file打开eclipse.ini文件

  4. Change below parameters更改以下参数

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

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

The most obvious explanation is that you are truly out of memory.最明显的解释是你真的内存不足。 In which case starting Eclipse with a bigger heap should help在这种情况下,使用更大的堆启动 Eclipse 应该会有所帮助

 -vmargs -Xmx256M

varying the 256M to see what works for you.改变 256M 看看什么适合你。

I would not expect to see this problem if you have just a few simple projects.如果您只有几个简单的项目,我不会期望看到这个问题。 If you are using additional plugins then conceivably the amount of heap you need may need to be increased.如果您正在使用其他插件,则可以想象您需要增加堆的数量。

Not sure if relevant to your problem, but I just had a similar problem with a Swing project using OpenJDK 7.不确定是否与您的问题相关,但我在使用 OpenJDK 7 的 Swing 项目中遇到了类似的问题。

After several cycles of starting (the Run button) and closing ( 'X' / Alt+F4 ) my application, I got this error in the console:在启动( 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)

And sometimes, I got another sort of error:有时,我会遇到另一种错误:

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

and then, if I tried to run it once more, Java crashed:然后,如果我再次尝试运行它,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 revealed the cause of the problem (notice virtual memory usage): 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   

These were all instances of my application, which had not been closed.这些都是我的应用程序的实例,尚未关闭。 Still not sure why so much virtual memory was allocated per instance - probably there's some option for that.仍然不确定为什么每个实例分配了如此多的虚拟内存 - 可能有一些选择。 (I have 3GiB of physical memory, by the way). (顺便说一下,我有 3GiB 的物理内存)。

Here's my main() method:这是我的 main() 方法:

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

I saw the commented line in a tutorial and specifically disabled it to see what would happen.我在教程中看到了注释行,并专门禁用了它以查看会发生什么。 What happened was that that it defaulted to HIDE_ON_CLOSE , which did not close and dispose of the frame.发生的事情是它默认为HIDE_ON_CLOSE ,它没有关闭和处理框架。

Setting setDefaultCloseOperation to EXIT_ON_CLOSE was the solution for me.setDefaultCloseOperation设置为EXIT_ON_CLOSE是我的解决方案。 Interested to see input from more knowledgeable people on this, though.不过,有兴趣看到更多知识渊博的人对此的意见。

  • Open Your eclipse.ini file打开你的 eclipse.ini 文件
  • XXMaxPermSize will be 256m. XXMaxPermSize 将为 256m。
  • Change the value to 512m.将值更改为 512m。
  • Restart your eclipse.重启你的日食。
  • Now you will not see any memory issues in Eclipse.现在您将不会在 Eclipse 中看到任何内存问题。

In Brief See below:简述如下:

Before

--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m

After:后:

--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m

For everyone (like me) who ends up at the bottom without fixing it...对于每个(像我一样)没有修复它而最终落在底部的人......

My Eclipse ran out of memeory every time I tried to save a specific file.每次我尝试保存特定文件时,我的 Eclipse 内存都用完了。

Eclipse has a bug where it is unable to handle formatting a comment between a method type and a method name, like the code given below. Eclipse 有一个错误,它无法处理格式化方法类型和方法名称之间的注释,如下面给出的代码。 The fix is to move the comment up or down解决方法是将评论向上或向下移动

public String 
  // Never put a comment here, Eclipse will run out of memory
  getName() {
   return "name";
  }

You have to use setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);你必须使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

You can see from here你可以从这里看到

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM