论坛首页 Java企业应用论坛

Linux系统中JVM内存2GB限制的原因

浏览 3108 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-15   最后修改:2009-04-21

(转载请注明出处:Java,JavaFX技术交流 http://javafxguy.iteye.com)

其它文章: Java虚拟机的调优参考  JavaFX 1.1和JavaFX 1.0的兼容性

接触到的一些用户反映在Linux系统中运行的Java应用,内存只能使用到2GB,在Java虚拟机中如果把-Xmx参数设置到2GB左右(约1.5-1.8GB),java进程就根本启动不了。我们通常使用的JVM都是32位的(64位的JVM会损失10-20%的性能,通常不建议使用),而32位程序的寻址空间应该是4GB才对,为什么Linux上的JVM只能使用2GB的内存呢? (注:Windows上也有类似的问题)

经过和JDK研发组的人员沟通,终于弄清楚了一些相关的原因。这个问题存在于早期的一些Linux版本中,特别是内核2.5以前的版本,2.6以后的版本就基本上没有这个问题了。原来这些Linux版本多是32位的,内核使用了2GB空间,应用进程就只有2GB了,也就是说一个地址连续的内存块大小的上限是2GB,而JVM的堆空间(heap size)需要连续的地址空间,因此,2GB就是java进程的理论使用的内存上限。

(转载请注明出处:Java,JavaFX技术交流 http://javafxguy.iteye.com)

如果java应用需要使用较大的内存,建议使用较新版本的linux,或者修改Linux的应用/内核内存比配置为3GB:1GB。还有就是选择如Solaris等的UNIX操作系统。象Solaris这样的操作系统,在内存管理上没有2GB的限制,因此可以把heap size设置到3.5-3.6GB左右。 

 

Computer Canadian Citizenship Test

   发表时间:2009-04-15  
嗯,话说,这个还是要看硬件吧。。。。
像MIPS32位就指明了说用户态只可能有2G内存。。。。

intel不清楚。。。不过超过4G本身就应该考虑64位地址空间了。。。
0 请登录后投票
   发表时间:2009-04-15  
对,如果是较旧的Intel/AMD的CPU,因为体系架构上有寻址空间的限制,是不支持超过2GB的内存的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics