为什么我得到java.lang.OutOfMemoryError?

时间:2015-04-20 08:01:57

标签: java eclipse

我正在尝试分配3个X 20485700字节(总计:~600MB)。 如果我用C ++编写程序,我可以无误地运行它, 但是相同的程序(用java编写) - 我得到了: java.lang.OutOfMemoryError:java堆空间。

我正在使用Eclipse(Juno) - 所以我认为日食不是问题所在。 (Xms700m Xmx1024m)

我该怎么办?问题是什么?

由于

3 个答案:

答案 0 :(得分:2)

将VM配置参数-Xms700m -Xmx1024m放入程序的“运行配置”中。

右键单击您的程序文件(包含main()的文件),选择" Run As",选择"运行配置"。在此向导中,选择选项卡" JRE"。有一个textarea作为" VM Arguments"。将您的VM参数放在此textarea中。

答案 1 :(得分:1)

C ++在分配时不限制内存空间在Java堆被限制在内存上时,它将-Xmx和-Xms作为参数并分配 java堆的应用程序用法。如果分配的内存空间被占用,并且没有更多的空间可用于分配,则GC启动清除死对象,即使在GC之后如果Java堆没有足够的空间用于对象分配,则JVM会抛出OutOfMemory错误以通知用户/应用程序开发人员然后当前的Xmx不足以进行对象分配,因此它可以帮助开发人员根据当前使用情况和应用程序需求增加Xmx。

答案 2 :(得分:0)

允许Java应用程序使用有限的内存。在应用程序启动期间指定此限制。 Java内存分为两个不同的区域:堆空间和permgen。

  

通过指定-Xmx和-XX:MaxPermSize等参数,在Java虚拟机(JVM)启动期间设置这些区域的大小。如果未明确设置大小,将使用特定于平台的默认值。