首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >64位操作系统上32位JVM的最大Java堆大小

64位操作系统上32位JVM的最大Java堆大小
EN

Stack Overflow用户
提问于 2009-09-16 18:44:52
回答 8查看 312.1K关注 0票数 114

问题不在于32位操作系统上的最大堆大小,因为32位OSes的最大可寻址内存大小为4 4GB,并且JVM的最大堆大小取决于可以保留多少连续的空闲内存。

我更感兴趣的是知道在64位操作系统中运行的32位JVM的最大堆大小(理论上和实际上都可以实现)。基本上,我正在寻找类似于the figures in a related question on SO的答案。

至于为什么使用32位JVM而不是64位JVM,原因不是技术原因,而是管理/官僚作风-在生产环境中安装64位JVM可能为时已晚。

EN

回答 8

Stack Overflow用户

发布于 2009-09-16 19:02:05

64位操作系统上32位JVM的限制与32位操作系统上32位JVM的限制完全相同。毕竟,32位JVM将在32位虚拟机上运行(在虚拟化意义上),因此它不会知道它正在64位操作系统/机器上运行。

与在32位操作系统上运行32位JVM相比,在64位操作系统上运行32位JVM的一个优点是您可以拥有更多的物理内存,因此不会经常遇到交换/分页。然而,只有当您有多个进程时,这一优势才能真正充分实现。

票数 9
EN

Stack Overflow用户

发布于 2011-12-11 18:23:56

Oracle当前拥有的JROCKIT JVM支持非连续堆使用,因此当JVM在64位windows操作系统上运行时,允许32位JVM访问超过3.8 GB的内存。(在32位操作系统上运行时为2.8 GB )。

http://blogs.oracle.com/jrockit/entry/how_to_get_almost_3_gb_heap_on_windows

JVM可以在以下地址免费下载(需要注册)

http://www.oracle.com/technetwork/middleware/jrockit/downloads/index.html

票数 4
EN

Stack Overflow用户

发布于 2013-05-04 03:03:49

以下是在Solaris和Linux 64位环境下的一些测试

Solaris10- SPARC - T5220机器,内存32 GB (空闲约9 GB )

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3750m MaxMemory
Error occurred during initialization of VM
Could not reserve space for ObjectStartArray
$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3700m MaxMemory
Total Memory: 518520832 (494.5 MiB)
Max Memory:   3451912192 (3292.0 MiB)
Free Memory:  515815488 (491.91998291015625 MiB)
Current PID is: 28274
Waiting for user to press Enter to finish ...

$ java -version
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) Server VM (build 20.5-b03, mixed mode)

$ which java
/usr/bin/java
$ file /usr/bin/java
/usr/bin/java: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, not stripped, no debugging information available

$ prstat -p 28274
   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
28274 user1     670M   32M sleep   59    0   0:00:00 0.0% java/35

顺便说一句:显然Java在启动时并没有分配太多的实际内存。似乎每个启动的实例只需要大约100MB(我启动了10个)

Solaris10- x86 - VMWare虚拟机,8 GB内存(约3 GB可用*)

3 GB的空闲内存并不是真的。ZFS缓存使用了大量的RAM,但是我没有root访问权限来检查到底有多少

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3650m MaxMemory
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3600m MaxMemory
Total Memory: 516423680 (492.5 MiB)
Max Memory:   3355443200 (3200.0 MiB)
Free Memory:  513718336 (489.91998291015625 MiB)
Current PID is: 26841
Waiting for user to press Enter to finish ...

$ java -version
java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Server VM (build 20.14-b01, mixed mode)

$ which java
/usr/bin/java

$ file /usr/bin/java
/usr/bin/java:  ELF 32-bit LSB executable 80386 Version 1 [FPU], dynamically linked, not stripped, no debugging information available

$ prstat -p 26841
   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
26841 user1     665M   22M sleep   59    0   0:00:00 0.0% java/12

具有4 GB内存的RedHat 5.5 - x86 - VMWare VM (使用了约3.8 GB内存- 200 MB的缓冲区和3.1 GB的缓存,因此约3 GB可用)

$ alias java='$HOME/jre/jre1.6.0_34/bin/java'

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3500m MaxMemory
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3450m MaxMemory
Total Memory: 514523136 (490.6875 MiB)
Max Memory:   3215654912 (3066.6875 MiB)
Free Memory:  511838768 (488.1274871826172 MiB)
Current PID is: 21879
Waiting for user to press Enter to finish ...

$ java -version
java version "1.6.0_34"
Java(TM) SE Runtime Environment (build 1.6.0_34-b04)
Java HotSpot(TM) Server VM (build 20.9-b04, mixed mode)

$ file $HOME/jre/jre1.6.0_34/bin/java
/home/user1/jre/jre1.6.0_34/bin/java: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

$ cat /proc/21879/status | grep ^Vm
VmPeak:  3882796 kB
VmSize:  3882796 kB
VmLck:         0 kB
VmHWM:     12520 kB
VmRSS:     12520 kB
VmData:  3867424 kB
VmStk:        88 kB
VmExe:        40 kB
VmLib:     14804 kB
VmPTE:        96 kB

同一台机器使用JRE7

$ alias java='$HOME/jre/jre1.7.0_21/bin/java'

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3500m MaxMemory
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

$ java -XX:PermSize=128M -XX:MaxPermSize=256M -Xms512m -Xmx3450m MaxMemory
Total Memory: 514523136 (490.6875 MiB)
Max Memory:   3215654912 (3066.6875 MiB)
Free Memory:  511838672 (488.1273956298828 MiB)
Current PID is: 23026
Waiting for user to press Enter to finish ...

$ java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) Server VM (build 23.21-b01, mixed mode)

$ file $HOME/jre/jre1.7.0_21/bin/java
/home/user1/jre/jre1.7.0_21/bin/java: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

$ cat /proc/23026/status | grep ^Vm
VmPeak:  4040288 kB
VmSize:  4040288 kB
VmLck:         0 kB
VmHWM:     13468 kB
VmRSS:     13468 kB
VmData:  4024800 kB
VmStk:        88 kB
VmExe:         4 kB
VmLib:     10044 kB
VmPTE:       112 kB
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1434779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档