JVM内存模型及相关启动参数设置

在jvm中堆空间划分为三个代:
    年轻代(Young Generation)、
    年老代(Old Generation)和
    永久代(Permanent Generation)。
  年轻代和年老代是存储动态产生的对象,又称为“堆内存”。
  永久代主要是存储的是java的类信息,包括解析得到的方法、属性、字段等等,又称为“非堆内存”。
  永久代基本不参与垃圾回收。

年轻代又分成3个部分:
  
一个eden区和两个相同的survior区。
  刚开始创建的对象都是放置在eden区的。分成这样3个部分,主要是为了生命周期短的对象尽量留在年轻带。
  当eden区申请不到空间的时候,进行minorGC,把存活的对象拷贝到survior。
  年老代主要存放生命周期比较长的对象,比如缓存对象。


jvm内存回收过程描述如下:
  1、对象在Eden区完成内存分配
  2、当Eden区满了,再创建对象,会因为申请不到空间,触发minorGC,进行young(eden+1survivor)区的垃圾回收
  3、minorGC时,Eden不能被回收的对象被放入到空的survivor(Eden肯定会被清空),另一个survivor里不能被GC回收的对象也会被放入这个survivor,始终保证一个survivor是空的
  4、当做第3步的时候,如果发现survivor满了,则这些对象被copy到old区,或者survivor并没有满,但是有些对象已经足够Old,也被放入Old区 XX:MaxTenuringThreshold
  5、当Old区被放满的之后,进行fullGC


不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。
总结java的内存模型,要解决两个主要的问题:可见性和有序性。
。。。

Xms Xmx PermSize MaxPermSize区别

举例说明含义:
  -Xms128m
  表示JVM Heap(堆内存)最小尺寸128MB,初始分配
  -Xmx512m
  表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配。

  说明:如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉。

PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。

-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配,过小会导致:java.lang.OutOfMemoryError: PermGen space

MaxPermSize缺省值和-server -client选项相关。
  -server选项下默认MaxPermSize为64m
  -client选项下默认MaxPermSize为32m

xms/xmx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。
  在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。
  在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。
  在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

SurvivorRatio:设置YOUNG代中Survivor空间和Eden空间的比例

内存监控的方法:
  jmap -heap pid:查看java 堆(heap)使用情况

参考:
  JVM内存结构分析  http://blog.csdn.net/mahongming/article/details/5992083
  JVM垃圾回收  http://www.cnblogs.com/welbeckxu/archive/2012/02/29/2373704.html
  JVM的内存模型之eden区 转载  http://www.blogjava.net/ytl-zlq/archive/2012/03/01/371093.html
  JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别  http://hi.baidu.com/manbsn/blog/item/5e6cd32648d17f1b918f9dff.html

 

posted @ 2012-04-01 20:56  万法自然~  阅读(194)  评论(0)    收藏  举报