【jvm】jvm调优

原资料

jvm 类型

有两种类型的 hotspot jvm ,即 “server” 和 “client" 。 jvm 可根据内存,机器情况,自动选择jvm类型。 如果想手动选择,则可通过 -server-client 参数指定jvm 类型。

  1. server : 服务端类型,有更多的堆内存,并行的垃圾收集器,运行时可更大程度的优化代码
  2. client : 客户端类型,相比服务端类型,有更少的堆内存
  3. 查看jvm版本以及类型

    java -version

jvm 参数分类

  1. 标准参数
    1. 稳定的,将来的jvm版本不会改变的参数,可通过 java 或者 java -help 命令检出的
  2. X参数
    1. 非标准化的参数,将来的jvm 版本中可能会改变的,可通过 java -X 命令检出,但并不是所有该类型都能检出
  3. XX 参数
    1. 不稳定的,甚至是在实验阶段的参数,甚至长时间段内未被列出,该类型参数都以 -XX 开头,但是随后的语法不同,取决于参数的类型。 可通过 -XX:+PrintFlagsFinal 或者 -XX:+PrintFlagsFinalInitial 输出所有XX类型参数信息(参数类型,参数名称,默认值=,被用户或者jvm赋值 :=)

    对于布尔类型的参数,我们有”+”或”-“,然后才设置JVM选项的实际名称。例如,-XX:+用于激活选项,而-XX:-用于注销选项。
    -XX:+PrintCompilation :输出编译信息
    -XX:+ClTime : 关闭jvm 时输出编译时效统计信息
    -XX:+PrintCommandLineFlags : 输出所有被用户或者jvm 设置过的XX参数以及值
    对于需要非布尔值的参数,如string或者integer,我们先写参数的名称,后面加上”=”,最后赋值。例如,  -XX:=给赋值。

jvm 调优参数

  1. Xms128m : 初始化堆内存大小为128M,不包括永久代的空间,是 -XX:InitailHeapSize=128m 的缩小
  2. Xmx2g : 最大堆内存大小 为 2G,不包括永久代的空间, 是 -XX:MaxHeapSize=2g 的缩小
  3. -XX:+HeapDumpOnOutOfMemoryError : jvm 发送内存溢出时自动生成堆内存快照
  4. -XX:HeapDumpPath= :设置堆内存快照生成的路径
  5. -XX:OnOutOfMemory="" : 可接收一串指令,当堆内存溢出时,执行指令
  6. -XX:PermSize= : 初始化永久代大小
  7. -XX:MaxPermSize= : 最大永久代大小

新生代垃圾回收

  1. 新生代特征

    1. 新生代对象朝生夕死,生命周期短,基本采用复制算法做垃圾回收
  2. 新生代划分

    1. 伊甸园区(Eden): 对象最开始在此分配到内存
    2. 幸存区(suivivor): 新生代垃圾回收时,存活对象符合条件(年龄,大小)会被移入幸存区
      1. from,to : 大小一致,from 和 to 的作用会来回转换
  3. 调优参数

    1. -XX:NewSize : 初始化新生代大小
    2. -XX:MaxNewSize : 最大新生代大小
    3. -XX:NewRatio=3 : 老年代和新生代的大小比, 老年代/新生代 : 3/1 ,新生代为整个堆区的 1/4
    4. -XX:SuivivorRatio=8 : 伊甸园区和单个幸存区(from/to)的大小比 , 伊甸园区占新生代8/10,from和to区域占新生代 1/10

垃圾回收器评估标准

  1. 吞吐量 :吞吐量越高越好,吞吐量:应用程序线程占程序总用时比例
  2. 暂停时间 : stop the world 的时间越短越好。
  3. 高吞吐量和低暂停时间互相矛盾,高吞吐(减少GC 线程占时)-> 减少GC 线程数/ 减少GC次数; 低暂停-> 垃圾回收量有限 -> 增加GC次数 -> 增加GC线程总占有时间 -> 低吞吐

CMS 收集器

  1. 基本介绍
    1. 低暂停型收集器,大多数时间GC线程可以和应用线程并行
    2. 基于标记-清除算法,无压缩操作,容易产生碎片
    3. 针对老年代
  2. 执行过程
    1. 初始化标记:stop the world ,标记gc root 指向的对象为存活对象,标记年轻的中可达老年代的对象
    2. 并发标记 : gc root tracing ,标记gc root 指向的对象所指向的对象为存活对象
    3. 并发预清理
    4. 重标记:stop the world ,修正并发标记阶段应用线程改动了的对象
    5. 并发清理 : 清理无用引用,回收堆内存
    6. 并发处置:收尾工作
  3. 可能存在的问题
    1. 内存碎片化
    2. 浮动垃圾 : 并发标记阶段,产生的新垃圾,当前的GC 无法清理的垃圾,需要下次GC 再清理
  4. 常用命令
    1. -XX:+UseConcMarkSweepGC :指定使用CMS 收集器
    2. -XX:+UseCompactAtFullCollection : 开启内存碎片的压缩整合
    3. -XX:+CMSFullGcsBeforeCompact : 与*-XX:+UseCompactAtFullCollection* 一起使用,指定执行多少次不压缩gc 后,进行一次压缩整合,可缓解碎片化问题
    4. -XX:CMSInitiatingOccupancyFraction=75 : 老年代使用率达到75%时进行垃圾回收,需要预留空间,给浮动垃圾和新进入老年代的对象,所以该值不能太高
  5. 1,2,3 步或者2,3,4步的作用

GC 日志

  1. -XX:+PrintGC
    输出基本的gc 信息:gc类型,gc 前后堆内存的使用大小,gc耗时
  2. -XX:+PrintGCDetails
    输出详细的gc 信息:gc类型,所使用的gc器,gc前后堆内存的使用大小,堆内存的总大小,gc耗时
  3. -Xloggc
    指定gc 日志输出文件,默认设置了 -XX:+PrintGC-XX:+PrintGCTimeStamps
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值