JAVA 进程最大内存

    总听说32bit 系统中进程最大内存2G 类似的话,今天花了点时间来求证下,目前还有不完整的情况,后续补充。

 

    首先说32位,这个概念最早应该是从CPU来的。通常32位CPU最大支持2^32Bytes内存也就是4GB,不过较新的CPU一般支持PAE模式,启用PAE模式理论上可以支持64GB的内存。

    不过仅仅CPU支持是不行的,还需要操作系统支持。操作系统也有32位,64位之分。而且一般情况下32位操作系统最大内存是4G,比如我们的通常使用的XP,vista,win7,有些企业版本,比如带Server ,Enterprice ,Datacenter字样的特殊版本内存通常会大很多。

 

    linux2.3.23之前也是4G,之后的版本支持PAE了,所以理论上都是64GB。如果想你的系统支持内存大于4G需要自己开启PAE。

 

    既然32位系统最大支持内存是4G,为什么我们编程的时候是2G呢,这个跟操作系统有关系了。

    对微软的系统来说,操作系统将内存分为两部分,一部分给操作系统使用的,一部分给除操作系统之外的应用程序使用的。

默认情况下两部分都是2GB,(2000-2003,都会有个boot.ini)文件可以设置这个值。win7里没有这个文件了,但是可以通过bcdedit命令来设置。

    对于linux系统来说,这个比例是1:3,3GB是给用户进程使用的,因此在linux下应用程序的最大内存是3GB,当然也是可以设置的,好像需要从新编译内核。

 

   接下来我用32位的window7系统来测试JAVA最大内存的情况。

 

   首先了解系统默认的虚拟机参数

   -Xms 初始堆大小 物理内存的1/64

   -Xmx 最大堆大小 物理内存的1/4

   -XX:MaxPermSize 设置持久代最大值 物理内存的1/4

   -Xss 每个线程的堆栈大小   JDK5.0后每个大小为1M,之前为256K,减少这个值能够创建更多的线程。

 

   1,修改-Xmx1600m 其它默认可以运行

   2,修改-Xmx1650m 其它默认不可以运行   (失败)

   3,修改-Xmx1600m -XX:MaxPermSize=80m 可以运行

   4,修改-Xmx1600m -XX:MaxPermSize=90m 不可以运行   (失败)

   5,修改-Xmx680m -XX:MaxPermSize=1000m 可以运行

   6,修改-Xmx690m -XX:MaxPermSize=1000m 不可以运行   (失败)

 

所以为了安全,通常两个Xmx 和MaxPermSize 之和<1500m

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值