jvm 常用概念(未整理完)

来源:互联网 发布:vb语言和java 编辑:程序博客网 时间:2024/06/06 01:49

一 堆大小设置

JVM 中最大堆大小有三方面限制:
a. 操作系统的数据模型(32-bt还是64-bit)限制;
b. 系统的可用虚拟内存限制;
c. 系统的可用物理内存限制

典型设置:

1. java -Xmx2048m -Xms2048m -Xmn1g -Xss128k

  • xms 指定程序的初始化内存大小
  • xmx 指定程序占用的最大内存
  • Xmn 设置年轻代大小

    整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

  • Xss 设置每个线程的堆栈大小

    JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右

2. java -Xmx2048m -Xms2048m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

XX:NewRatio 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)

设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

XX:SurvivorRatio 设置年轻代中Eden区与Survivor区的大小比值

设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6

XX:MaxPermSize 设置持久代大小

XX:MaxTenuringThreshold 设置垃圾最大年龄

三 辅助信息

  • -XX:+PrintGC
    输出形式:
    [GC 118250K->113543K(130112K), 0.0094143 secs]
    [Full GC 121376K->10414K(130112K), 0.0650971 secs]
  • -XX:+PrintGCDetails
    输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
    [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
  • -XX:+PrintGCTimeStamps
  • XX:+PrintGC:PrintGCTimeStamps
    可与-XX:+PrintGC -XX:+PrintGCDetails混合使用
    输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
  • -XX:+PrintTLAB
    查看TLAB空间的使用情况

  • XX:+PrintTenuringDistribution
    Desired survivor size 1048576 bytes, new threshold 7 (max 15)
    new threshold 7即标识新的存活

0 0