JVM在32位操作系统上堆积

我使用32位win.7和使用Eclipse。 还有4GB内存。

我想分配我的Java应用程序的最大堆大小约3 GB,但我能够通过VM参数分配最大1.5GB -Xmx1056m

我该怎么办? 如果我安装一个64位win.7。 那么将能够分配3GB的heapsize到我的应用程序?

Solutions Collecting From Web of "JVM在32位操作系统上堆积"

即使您拥有更多可用内存,常规的32位Windows进程也只能处理2GB的内存。 你可以在这里找到不同Windows版本的内存限制。

由于虚拟机需要内存来存储比堆更多的内容,所以最大堆大小将略小于进程可用的最大内存容量。 通常情况下,你可以调整一个32位的Windows VM大约1.6GB的堆。

你需要一个64位的操作系统和64位的虚拟机来分配这么多的RAM。

我现在没有描述JVM内存管理过程的链接。 你偶然发现的限制是Java执行垃圾收集的限制。 Java内存堆必须是一个连续块。 垃圾收集算法已针对此设计限制进行了优化,因此可以高效执行。 在一个32位的操作系统中,你不能控制装入哪个内存地址的设备驱动程序。 在Windows上,操作系统只会重新分配存储在DLL中的设备驱动程序基地址,如果它与已经加载的代码冲突的话。 其他操作系统可能会重新分配加载的所有设备驱动程序,使它们位于内核附近的连续块中。

基本上,64位和32位操作系统的限制是相同的。 它只是在一个64位的操作系统,有几个地址范围可供选择。 确保使用64位JVM来匹配操作系统。 这就是为什么64位操作系统能够找到比32位操作系统更大的连续内存地址块的原因。

编辑:此外,32位JVM的最大堆大小限制为2GB。

参考:

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.html

Java在Windows XP上的最大内存

http://forums.sun.com/thread.jspa?messageID=2715152#2715152

你将需要的不仅是一个64位的操作系统和一个64位的虚拟机,而且还有更多的内存。

在32位Windows系统上,虚拟地址空间分割为2 GB用于内核操作,2 GB用于用户应用程序。 所以你搞砸了

有一个可能的但不太可能的解决方法:您可以启用 / 3GB开关来提高此限制,并让系统为内核操作分配1GB的虚拟地址空间,为用户应用程序分配3GB的虚拟地址空间(如果它们是/ LARGEADDRESSPACEAWARE )。

不幸的是,32位Sun / Oracle HotSpot JVM并不是LARGEADDRESSAWARE(我所知道的),其他的32位JVM也不是。

但想一想,即使你能做到这一点,你也可以使用所有可用的系统内存。 在为您的JVM分配了3GB堆之后,其他程序什么都不会留下。 您的系统将一直交换到磁盘。 这将是无法使用的。

只需要更多内存的64位操作系统。 这就是为你所有,找到方法让你的程序使用更少的内存。