Trace跟踪参数

  • -verbose:gc (打开gc)
  • -XX:+ printGC
  • 可以打印GC的简要信息
    常用JVM配置参数(三)
    常用JVM配置参数(三)GC之前用了4790k,GC之后用了374k,正大GC的大小为(15872k),运行时间为0.0001606 secs
  • -XX:+PrintGCDetails(打印GC详细信息)
  • -XX:+PrintGTimeStamps(打印GC发生的时间戳)

下面一段是:程序运行后的一段描述,会把整个程序堆的基本状况打印出来,
常用JVM配置参数(三)

  • Xloggc:log/gc.log(如何重定向GC的log)
    指定GC log的位置,以文件输出
    gc的log日志可以帮助开发人员分析问题。
    常用JVM配置参数(三)
    常用JVM配置参数(三)
  • -XX: + TraceClassLoading
    监控类的加载(做跟踪调试的时候,可以看到哪些类是被加载进来了)
    常用JVM配置参数(三)
  • -XX:+PrintClassHistogram(打印类的直方图)
  • 在控制台按下 Ctrl + Break后,打印在这个系统当中所有类的使用情况:
    常用JVM配置参数(三)

分别显示:序号、实例数量、总大小、类型

  • -Xmx -Xms
    -指定最大堆和最小堆
    常用JVM配置参数(三)
    常用JVM配置参数(三)
    常用JVM配置参数(三)
  • -Xmx和-Xms应该保持一个什么关系,可以让系统的性能尽可能的好呢?
  • 如果你要做一个Java的桌面产品,需要绑定JRE,但是JRE又很大,你如何做一下JRE的瘦身呢?

堆的分配参数

  • -Xmn
    -设置新生代大小

  • -XX:NewRatio

    • 新生代(eden+2*s)和老年代(不包含永久区)的比值

    • 4代表 新生代:老年代=1:4,即年轻代占堆的1/5

  • -XX: SurvivorRatio

    • 设置两个Survivor区和eden的比
    • 8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10

常用JVM配置参数(三)
Xmn1m:新生代1m指的是一等区和幸存区加起来一共1M.新生代内存空间小,所以所有的都被分配到了老年代。

新生代空间调为15m
常用JVM配置参数(三)
常用JVM配置参数(三)
常用JVM配置参数(三)
常用JVM配置参数(三)
GC越多一般来说,对系统是越不好的。幸存代用大之后,多空间的浪费是比较严重的,所以这里合理的减小了幸存代的大小,把幸存代减到了2M,eden区扩展到了6M,因为空间得到了合理的利用,因为GC的数量下降之后很多进程就没有机会晋升到老年代,所以来年代所使用的空间就为0。
常用JVM配置参数(三)

  • -XX:+HeapDumpOnOutOfMemoryError
    • OOM时导出堆到文件
  • -XX:+HeapDumpPath
    • 导出OOM的路径
      -常用JVM配置参数(三)
  • -XX:OnOutOfMemoryError
  • 在OOM时,执行一个脚本
    常用JVM配置参数(三)

堆的分配参数—总结

  • 根据实际事情调整新生代和幸存代的大小。(没有固定的值)
  • 官方推荐新生代占堆的3/8
  • 幸存代占新生代的1/10
  • 在OOM时,记得Dump出堆,确保可以排查现场问题。

永久区分参数

  • 设置永久区的初始空间和最大空间
  • 它们表示,一个系统可以容纳多少个类型。
    常用JVM配置参数(三)
    常用JVM配置参数(三)

栈的分配参数

-Xss

  • 通常只有几百k
  • 决定了函数调用的深度
  • 每个线程都有独立的栈空间
  • 局部变量、参数、分配在栈上。

第二个错:适量的增大栈空间,调用的次数也会增加,因为这个一个没有出口的函数,必然导致栈空间的溢出。
常用JVM配置参数(三)
如果想让程序多调用几次,那么就适当的减小局部标量的个数,可以减少每一次函数调用消耗的空间,这样也可以让这个函数多调用几次。

总结

温故而知新,可以为师也。

相关文章: