我在Windows 7 64位中使用32位版本的Java。系统的RAM为6 GB。但是当JVM由OS分配内存时,它不会超过1.5 GB(与32位OS相同)。可能的原因是,JVM不允许有足够的内存。如果可能的话怎么解决它?我无法升级到64位JVM。
答案 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)
答案 2 :(得分:1)
32位应用程序将无法使用更多4GB的RAM。在实践中,它将无法使用超过3GB,因为它需要为操作系统保留一些虚拟内存空间。
除此之外,默认情况下,JVM最多可分配四分之一的可用RAM。如果要覆盖此使用选项:
java -XX:DefaultMaxRAMFraction=1
它应该使用32位应用程序可用的所有可用RAM。
答案 3 :(得分:1)
为了能够使用更多内存,您必须升级到64位。不幸的是,64位JVM无法加载32位dll,因此对dll的调用必须来自不同的进程,并且必须使用rpc机制与进程通信而不是直接使用dll。这是很多。工作但可以做到。