2015-04-20 32 views
-2

我想分配3个X 20485700字节(总计:〜600MB)。 如果我正在用C++编写程序,我可以运行它没有错误, 但是相同的程序(用java编写) - 我得到: java.lang.OutOfMemoryError:java堆空间。为什么我得到java.lang.OutOfMemoryError?

我使用Eclipse(Juno) - 所以我认为eclipse不是问题。 (Xms700m Xmx1024m)

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

谢谢

+0

可能的重复[在java中增加堆大小](http://stackoverflow.com/questions/1565388/increase-heap-size-in-java) – weston

+1

那些用来运行Eclipse本身的内存参数,或那些在程序的运行配置中指定? –

+2

具体请参阅http://stackoverflow.com/a/15517960/1341535关于运行配置。 –

回答

0

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

The size of those regions is set during the Java Virtual Machine (JVM) launch by specifying parameters such as -Xmx and -XX:MaxPermSize. If you do not explicitly set the sizes, platform-specific defaults will be used.

+0

我做到了: 中openFile -vmargs -Dosgi.requiredJavaVersion = 1.5 -XX:MaxPermSize参数=256米 -Xms700m -Xmx1024m 它没有工作 – user3668129

+0

尝试将其更改为-Xmx2048m – Abhishek

+0

我tryied,同样的问题.. 。 – user3668129

2

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

右键单击你的程序文件(包含main()),选择“Run As”,选择“Run Configurations”。在此向导上,选择标签“JRE”。有一个textarea作为“VM参数”。把你的VM参数放在这个textarea中。

+0

我做到了: 中openFile -vmargs -Dosgi.requiredJavaVersion = 1.5 -XX:MaxPermSize参数=256米 -Xms700m -Xmx1024m 它没有工作 – user3668129

+0

@ user3668129这是Eclipse的配置,而不是程序你在Eclipse中运行。 – Seelenvirtuose

+0

如何设置程序的配置? – user3668129

1

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