Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93572
  • 博文数量: 32
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 275
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 20:42
文章分类

全部博文(32)

文章存档

2011年(1)

2010年(15)

2009年(16)

我的朋友

分类: Java

2009-11-26 17:44:04

jvm独立于平台存在,在不同的平台下可用内存大小也不一样,可通过下列命令来查看jvm在具体平台下可用的最大内存值:
java -Xmx*M -version(其中*为最大内存值)
若出现如下显示则说明堆内存可用:
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Server VM (build 1.5.0_06-b05, mixed mode)
若是显示如下则堆内存超出系统限制:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
默认情况下windows下最大可用堆内存值为1800M,linux下为2600M。
 
关于jvm可用内存限制的说明:
 
32位系统下,由于寻址空间的限制,单个进程最大可用内存为2^32,即4G,我们可以将这4G看作为进程可用的虚拟地址空间,包含了内核空间和用户空间,内核空间仅供内存使用。windows下默认内核空间和用户空间各分2G,而linux下为1G/3G。
 
java进程只能以单进程的方式运行,则jvm在linux下可使用的最大空间不会超过3G,而java进程在运行时还需要一部分空间与jvm中的堆空间分离,则jvm使用的堆空间肯定是少于3G的。
 
要突破这种限制,可使用64 位的系统,单进程的用户空间会大大增加,linux下默认为500G。另外可使用unix系统,unix系统即使在32位下也可以通过调节内核参数来加大进程的用户空间。
 
注:使用PAE技术可以将寻址位加大到36位,即64G,但单进程不能直接使用这64G的空间,需要通过相关的映射技术来实现。所以一般来说,在32位linux下,单进程的可用内存空间最大为4G。
 
附上High Memory in the Linux Kernel的说明:
  This is enabled via the PAE (Physical Address Extension) extension of the PentiumPro processors. PAE addresses the 4 GB physical memory limitation and is seen as Intel's answer to AMD 64-bit and AMD x86-64. PAE allows processors to access physical memory up to 64 GB (36 bits of address bus). However, since the virtual address space is just 32 bits wide, each process can't grow beyond 4 GB.
阅读(2502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~