在64位Windows中使用32位Java

时间:2013-10-10 08:01:47

标签: java jvm 32bit-64bit heap-memory

我在Windows 7 64位中使用32位版本的Java。系统的RAM为6 GB。但是当JVM由OS分配内存时,它不会超过1.5 GB(与32位OS相同)。可能的原因是,JVM不允许有足够的内存。如果可能的话怎么解决它?我无法升级到64位JVM。

4 个答案:

答案 0 :(得分:2)

Windows上的32位进程仍然受到与在32位Windows操作系统上运行相同的限制。看看这个问题的答案。

How much memory can a 32 bit process access on a 64 bit operating system?

来自Oracle的

This guidance表明32位JVM可以使用大约1.5GB。

  

32位JVM的最大理论堆限制为4G。由于各种附加约束,例如可用交换,内核地址空间使用,内存碎片和VM开销,实际上限制可以低得多。在大多数现代32位Windows系统上,最大堆大小范围为1.4G到1.6G。

答案 1 :(得分:1)

this article所示:

  

默认的最大堆空间是物理内存的1/2,大小高达192字节,物理内存的1/4,大小高达1G。

我知道你有超过1G,但也许这也适用于你

答案 2 :(得分:1)

32位应用程序将无法使用更多4GB的RAM。在实践中,它将无法使用超过3GB,因为它需要为操作系统保留一些虚拟内存空间。

除此之外,默认情况下,JVM最多可分配四分之一的可用RAM。如果要覆盖此使用选项:

java -XX:DefaultMaxRAMFraction=1

它应该使用32位应用程序可用的所有可用RAM。

来源:http://jvm-options.tech.xebia.fr/#

答案 3 :(得分:1)

为了能够使用更多内存,您必须升级到64位。不幸的是,64位JVM无法加载32位dll,因此对dll的调用必须来自不同的进程,并且必须使用rpc机制与进程通信而不是直接使用dll。这是很多。工作但可以做到。