为了账号安全,请及时绑定邮箱和手机立即绑定

Java VM 启动参数详解

标签:
Java

Java VM 启动参数详解

@Date 2017.05.24


打印输出相关参数

-verbose

  • 打印加载类的详细信息

-verbose:gc

  • 打印虚拟机中GC的详细情况:显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof

  • 虚拟机在出现内存溢出异常时Dump 出当前的内存堆转储快照

-XX:+TraceClassLoading

  • 打印加载类的详细信息

-XX:+PrintGCDetails

  • 详细了解GC中的变化

-XX:+PrintGCDateStamps

  • 了解垃圾收集发生的时间,自JVM启动以后以秒计量

-Xloggc:/home/admin/logs/gc.log

  • GC日志文件的路径


涉及堆相关的参数

-server

  • server模式下,新生代选择的是并行GC,旧生代选择的是并行GC

  • client模式下,新生代选择的是串行GC,旧生代选择的是串行GC

-Xms2g

  • 堆的初始值2g

-Xmx2g

  • 堆的最大值2g

  • PS:避免在运行时频繁调整Heap的大小,通常-Xms与-Xmx的值设成一样

-XX:MinHeapFreeRation=

  • 空余堆内存小于MinHeapFreeRation时,JVM会增大Heap到-Xmx指定的大小

-XX:MaxHeapFreeRation=

  • 空余堆内存大于MaxHeapFreeRation时,JVM会减小heap的大小到-Xms指定的大小

-Xmn1g

  • 新生代堆大小1G

-XX:SurvivorRatio=8

  • 默认32:1:1

  • 新生代的Eden区:From区:To区的比例为8:1:1

-XX:PermSize= (JDK7)

  • 永久代大小

-XX:MaxPermSize= (JDK7)

  • 永久代MAX大小

-XX:MetaspaceSize= (JDK8)

  • 代替PermSize,元空间大小

-XX:MaxMetaspaceSize= (JDK8)

  • 代替MaxPermSize,元空间最大值


回收算法

标记-清理

  • 直接清理

  • 效率高

  • 产生内存碎片

标记-复制

  • 两块内存区域,S1,S2

  • 不存在内存碎片

  • 占用双倍空间

标记-整理

  • 在标记-清理之后,让剩余存活的对象都向一端移动,并更新引用其对象的指针

  • 效率低

  • 不产生碎片

分代收集算法

  • 把Java堆分新生代和老年代

  • 在新生代用复制算法

  • 在老年代用标记-清理或标记-整理算法


垃圾清理类型

-XX:+UseSerialGC

  • Serial GC

  • 串行

  • 使用简单的标记、清除、压缩方法对年轻代和年老代进行垃圾回收,即Minor GC和Major GC

  • 适用于CPU配置较低,内存占用较少的单独Client应用模式

-XX:+UseParallelGC

  • Parallel GC

  • 并行

  • 收集方式同Serial GC一样

  • 产生N个线程来进行年轻代的垃圾收集

  • N默认=系统CPU核数

-XX:ParallelGCThreads=

  • 设置Parallel GC线程数量

-XX:+UseParallelOldGC

  • Parallel Old GC

  • 方式同Parallel GC

  • 主要是年轻代和年老代垃圾回收时都使用多线程收集

-XX:+UseConcMarkSweepGC

  • 并发标记清除(CMS)收集器

  • 短暂停顿并发收集器

  1. CMS-initial-mark:初始标记阶段(stop the world)

  2. CMS-concurrent-mark : 和应用线程并发执行,标记可达的对象

  3. CMS-concurrent-preclean(CMS-concurrent-preclean-start,CMS-concurrent-preclean) : 预清理(标记和应用线程是并发执行的,有些对象的状态在标记后会改变)

  4. CMS-concurrent-abortable-preclean : 进一步的预清理,减少Rescan阶段时间.使用到参数(-XX:CMSMaxAbortablePrecleanTime)

  5. Rescan阶段(stop the world) : 暂停应用线程,对对象进行重新扫描并标记

  6. CMS-concurrent-sweep : 并发的垃圾清理

  7. CMS-concurrent-reset : 下一次CMS GC重置相关数据结构

对年老代进行垃圾收集

年轻代使用的算法和Parallel一样

适用于不能忍受长时间停顿要求快速响应的应用

!!!FULL GC

  1. concurrent-mode-failure : CMS GC时,有新的对象要进入年老代,但是年老代空间不足

  2. promotion-failed : Young GC时,存活对象从Eden区到Survivor区,但是Survivor区空间不足,需要到年老代,年老代空间也不足



作者:voltric
链接:https://www.jianshu.com/p/674c3614ff34


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消