zoukankan      html  css  js  c++  java
  • JVM调优入门之初探

    JVM:程序计数器,jvm栈,本地方法栈,堆,方法区

    JVM:虚拟机内存又分有:年轻代(eden,servivor s0,servivor s1),年老代(tenured),永久代()

    问题1:如何查询当前JDK所使用的JVM版本等信息?

    C:UsersXXX>java -version
    java version "1.8.0_102"
    Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

    问题2:如何打印gc日志?

    Eclipse中执行程序后打印GC日志

    首先:右击应用并配置(-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:D:/gc.log),如下图所示:

    然后:执行程序,然后查看gc.log即可看到对应的gc日志,如下图所示:

     

    或者打印到控制台(配置过程同上)

    配置:-Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio=8

    注:1、PSYoungGen(包含Eden space,from space,to space)是年轻代,实例创建时在Eden space,经过1轮以上的gc后还存活,就会进入到from space,to space

      2、ParOldGen (Object space)年老代,

      3、Metaspace (class space)永久代,即主要保存静态常量和类的元数据信息;一般只有在类的实例被回收了,且对应加载的ClassLoader也被回收了之后,gc才回回收该资源;

    关于打印GC日志的参数总结
    -XX:+PrintGC 输出GC日志
    -XX:+PrintGCDetails 输出GC的详细日志
    -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
    -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
    -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
    -Xloggc:../logs/gc.log 日志文件的输出路径

    问题3:JVM参数?

    分析gc日志后,经常需要调整jvm内存相关参数,常用参数如下
    
    1、-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
    2、-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
    3、-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的Newgen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。 在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
    4、-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
    5、-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:”-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。
    6、-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
    7、-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。 

    图示:

    以上内容参考自:java之GC日志该怎么看

  • 相关阅读:
    rs
    stm32f767 usoc3
    stm32f767 RTT 日志
    stm32f767 标准库 工程模板
    stm32f767 HAL 工程模板
    docker tab 补全 linux tab 补全
    docker anconda 依赖 下载 不了
    docker run 常用 指令
    linux scp 命令
    Dockerfile 常用参数说明
  • 原文地址:https://www.cnblogs.com/outpointexception/p/10563520.html
Copyright © 2011-2022 走看看