java进程使用的最大内存的数值

java进程使用的最大内存的数值
2011年02月16日
  
http://guiqing85.javaeye.com/blog/582249
  这次一位老友提出了这个问题,记得当年一个java高手在blogjava提出后,被骂得半死。大家使用java -XmxXXXX -version版本得出了不同的结论。后来老友说大概是1800M左右,我当时反驳,“我设置过服务器8G内存,我使用两个tomcat,每个2G”。为此,我翻开所有的JVM的内存管理的c代码,没有任何结论。我不是linux内核程序员,但是我看过linux的源码,知道32位体系结构的计算机寻址空间是2^32=4G,intel Pentium Pro处理器寻址空间是36位,CPU内部增加了PAE寄存器。用于处理多出来的4根地址线的使用,所以PAE的技术实现最大2^36=64G寻址。通过linux的内核源码,标准Linux内核对于物理内存的管理采用1:3的分配比例,即物理内存的1/4为内核空间(kernel space),剩下的3/4为用户进程空间(user space),因此,在一台4G内存的服务器上,用户进程可使用的内存最大也就是3G。当进程被内核调入CPU运行时,不同的地址空间数据会被调入4G以内的用户进程空间,其实就能用3G。 IA32架构上,单一进程是不能使用超过4G的内存空间的。但是我记得我给mysql server分配内存大约是1.7G左右,不是2的32次方-1,我分配java 2G内存的计算机是IBM的RS6000.
  经过不同平台的测试,我得出了大概的数值,win2k下1.6G左右,nt下1.2G,原因是这样的,Classic VM and HotSpot VM 存放用户区的连续地址中,NT把 kernel DLLs 放在 0x7c 开头的地址空间,所以nt下只有windows下编译 dll 的默认地址都是10000000, 一般在release之前的时候要rebase一下,rebase 的 -b 这个参数是指定一个起始地址,MSDN建议地址是0x60000000,这个工具随visual studio和platform SDK发放。
  例如
  rebase.exe -b 0x6D000000 \jdk\jre\bin\*.dll \jdk\jre\bin\hotspot\jvm.dll这样你的JVM用的内存多一些,目前关于这个我只能得到BEA的 JRockit最大也只能使用1.8G内存,看来各家编译JDK时都作了些手脚.
  目前只能得到bea的的-Xmx最小值是16 MB,sun的资料很不全,还好java开源了,可以不依靠sun了.
  sun提供的资料
  Maximum Address Space Per Process
  Operating System Maximum Address Space Per Process
  Redhat Linux 32 bit 2 GB
  Redhat Linux 64 bit 3 GB
  Windows 98/2000/NT/Me/XP 2 GB
  Solaris x86 (32 bit) 4 GB
  Solaris 32 bit 4 GB
  Solaris 64 bit Terabytes
  以上文档有误,32位的redhat Server利用 Highmem技术可以使用3G内存.
  solaris不愧是java的诞生平台。
  问了一下bea的工程师,得出大致的结论,
  Windows 2003/XP using the /3GB switch (32-bit OS)
  1.85 GB - JRockit 5.0 R25.2 (SP2)
  2.85 GB - JRockit 5.0 R26 (SP3)
  Windows 2003/XP x64 Edition with a 32-bit JVM (64-bit OS)
  2.05 GB - JRockit 5.0 R25.2 (SP2)
  3.85 GB - JRockit 5.0 R26 (SP3)
  对于windows 2000打开3G模式,windows核心编程说得很清楚,boot.ini加入/3G参数。
  [boot loader]
  timeout=30
  default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB
  Note: "????" in the previous example can be the programmatic name of any of the following operating system versions:
  Windows XP Professional
  Windows Server 2003
  Windows Server 2003, Enterprise Edition
  Windows Server 2003, Datacenter Edition
  Windows 2000 Advanced Server
  Windows 2000 Datacenter Server
  Windows NT Server 4.0, Enterprise Edition
  在我的机子测试一把,我的自己配置,1G内存,winXP
  没有打开3G模式,sun的jdk 1.6 java -Xmx1447M -version,揪出错了,jrockit-R27.1.0-jdk1.5.0_08为1911M,3G模式 sun的jdk没有变化,IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223-2006050
  4 (JIT enabled) 3G和2G相同,java -Xmx1787M -version 就出问题,jrockit-R27.1.0-jdk1.5.0_08为2899M,注意Xmx的内存不是物理内存,我的机子物理内存只有1G。
  jrockit不愧为java第一虚拟机,只可惜不开源。
  linux 可以寻址的最大内存
  Intel X86
  .最大CPU数: 32(包括逻辑CPU)
  .最大内存: 64GB
  .最大文件大小: 8TB
  .最大文件系统大小(ext3): 16TB
  .最大每个进程的虚拟地址空间: 4GB
  AMD 64/EM64T
  .最大CPU数: 64
  .最大内存: 128GB
  .最大文件大小: 8TB
  .最大文件系统大小(ext3): 16TB
  .最大每个进程的虚拟地址空间: N/A
  请注意上面是标准的最大限制, 请不要跟Linux集群系统混淆(能扩充到1024个CPU).
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值