一张PDF了解JDK9 GC调优秘籍-附PDF下载

45 篇文章 4 订阅
6 篇文章 0 订阅

简介

今天我们讲讲JDK9中的JVM GC调优参数,JDK9中JVM的参数总共有2142个,其中正式的参数有659个。好像比JDK8中的参数要少一点。

为了方便大家的参考,特意将JDK9中的GC参数总结成了一张PDF,这个PDF比之前总结的JDK8的PDF在排版,颜色和内容准确性上面又有了非常大的提升,欢迎大家下载。

Oracle中的文档

今天这篇文章的内容都是从Oracle JDK9的官方文档中提炼出来的。对于里面的内容的真实性,我不能保证是100%正确的。

有人要问了,官网文档也会有错误?

这个问题要从两个方面说起,第一方面,任何人都会犯错误,虽然官网文档经过了编辑,校验核对然后才发布,但是总会有一些遗漏的地方。

第二,Oracle的文档是有专门的写文档的部门来专门编写的,写文档就是他们的工作,所以,这些文档并不是开发JDK的开发人员编写的,而是和开发JDK不相关的文档编写员编写的。

至于文档写完之后有没有JDK开发人员过目,大家可以自行脑补…

所以古人说得好,尽信书不如无书。

JDK9中JVM参数的变化

一代新人换旧人,长江后浪推前浪。由来只有新人笑 有谁听到旧人哭。

JDK9出现了,那么JDK8中的一些参数自然需要退伍了。

我们回想一下JDK9中有些什么变化呢?我总结一下有三个。

  1. 最大的变化就是引入了JPMS(Java Platform Module System)也就是Project Jigsaw。

    模块化的本质就是将一个大型的项目拆分成为一个一个的模块,每个模块都是独立的单元,并且不同的模块之间可以互相引用和调用。

    在module中会有元数据来描述该模块的信息和该模块与其他模块之间的关系。这些模块组合起来,构成了最后的运行程序。

  2. 然后就是引入的Xlog日志服务,通过Xlog日志服务我们可以监控JVM中的事件,比如:GC,class loading,JPMS,heap,thread等等。

  3. 最后就是将String中的底层存储从char数组换成了byte数组。

这三个变化中和JVM最相关的就是第二个Xlog日志服务。

废弃的JVM选项

-Xusealtsigs / -XX:+UseAltSigs

这两个选项在JDK9中被废弃了,如果你不知道也没关系,因为这两个选项是在Oracle Solaris中专有的。现在用Solaris服务器的人应该比较少了…

不推荐(Deprecated)的JVM选项

下面这些选项是JVM已经不再推荐使用了,如果你使用的话也没问题,但是会有报警。

Deprecated表示这些选项会在未来被删除,我们应该尽量避免使用这些选项。

选项有很多,我们挑一些比较常见和重要的来给大家讲解一下。

-d32 / -d64

为什么这两个参数会被不推荐呢?因为现在的服务器性能已经非常非常的好了。

如果你的JDK是64位的,那么默认就启用了-server和-d64模式,32位的JDK现在应该很少见到了。

Oracle官方文档说只有Java HotSpot Server VM才有64位的模式。不知道是真是假,因为其他的VM我也没有用过,没有发言权。

-Xloggc:garbage-collection.log

因为JDK9中引入Xlog框架,所以之前的日志输出的参数都被替换成了新的Xlog格式:

比如上面的命令被替换成为 -Xlog:gc:garbage-collection.log

所以那些以Print开头的GC日志输出参数都是不推荐的。我们需要使用Xlog来替代。

同样的以Trace开头的运行时日志输出参数也是不推荐的,也可以使用Xlog来替代。

-XX:+UseConcMarkSweepGC / -XX:CMS*

CMS在JDK9中是不被推荐的,所以CMS开头的参数都不要用了。

-XX:+UseParNewGC

因为ParNewGC是和CMS一起使用的,所以CMS不推荐之后,ParNewGC也是不推荐使用的。

-XX:MaxPermSize=size / -XX:PermSize=size

JDK8中,Prem区已经被移到了Metaspace,所以上面的参数可以被下面的替代:

-XX:MaxMetaspaceSize=size / -XX:MetaspaceSize=size

被删除的JVM参数

-Xincgc

增量GC在JDK9中被删除了。

-Xmaxjitcodesize=size JIT中最大的code cache大小被替换成 -XX:ReservedCodeCacheSize

还有其他的一些CMS的参数。

JDK9的新特性Application Class Data Sharing

AppCDS的全称是Application Class-Data Sharing。主要是用来在不同的JVM中共享Class-Data信息,从而提升应用程序的启动速度。

通常来说,如果要执行class字节码,JVM需要执行下面的一些步骤:给定一个类的名字,JVM需要从磁盘上面找到这个文件,加载,并验证字节码,最后将它加载进来。

如果JVM启动的时候需要加载成百上千个class,那么需要的就不是一个小数目了。

对于打包好的jar包来说,只要jar的内容不变,那么jar包中的类的数据始终是相同的。JVM在启动时候每次都会运行相同的加载步骤。

AppCDS的作用就是将这些能够共享的数据归类成一个存储文件,在不同的JVM中共享。

下面是AppCDS的大概工作流程:

  1. 选择要归档的class,并创建一个class的列表,用在归档中。( -XX:DumpLoadedClassList)

  2. 创建归档文件(-Xshare:dump和-XX:SharedArchiveFile)

  3. 使用归档文件(-Xshare:on 和 -XX:SharedArchiveFile)

相应的VM参数如下:

JDK9的新特性Xlog

在java程序中,我们通过日志来定位和发现项目中可能出现的问题。在现代java项目中,我们使用log4j或者slf4j,Logback等日志记录框架来处理日志问题。

JVM是java程序运行的基础,JVM中各种事件比如:GC,class loading,JPMS,heap,thread等等其实都可以有日志来记录。通过这些日志,我们可以监控JVM中的事件,并可以依次来对java应用程序进行调优。

在JDK9中引入的Xlog日志服务就是为这个目的而创建的。

通过xlog,JDK将JVM中的各种事件统一起来,以统一的形式对外输出。通过tag参数来区分子系统,通过log level来区分事件的紧急性,通过logging output来配置输出的地址。

在JDK9之后,之前的Print*参数都被Xlog所代替了。

我们看下常用的Xlog和GC日志参数:

JDK9中的G1参数

作为JDK9中的默认垃圾回收器G1,对G1的调优是必不可少的。下面是G1的参数:

JDK9中的通用VM参数

下面是通用的VM参数:

JDK9中的通用GC参数

下面是JDK9中的通用GC参数:

JDK9中的内存调整参数

下面是JDK9中的内存调整参数:

总结

千言万语不如一张PDF。我把JDK9的GC参数总结成了一张PDF,下面是PDF的下载链接。

JDK9GC-cheatsheet.pdf

欢迎大家下载。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/jdk9-gc-cheatsheet/

本文来源:flydean的博客

欢迎关注我的公众号:程序那些事,更多精彩等着您!

为什么要学JVM1、一切JAVA代码都运行在JVM之上,只有深入理解虚拟机才能写出更强大的代码,解决更深层次的问题。2、JVM是迈向高级工程师、架构师的必备技能,也是高薪、高职位的不二选择。3、同时,JVM又是各大软件公司笔试、面试的重中之重,据统计,头部的30家互利网公司,均将JVM作为笔试面试的内容之一。4、JVM内容庞大、并且复杂难学,通过视频学习是最快速的学习手段。课程介绍本课程包含11个大章节,总计102课时,无论是笔试、面试,还是日常工作,可以让您游刃有余。第1章 基础入门,从JVM是什么开始讲起,理解JDK、JRE、JVM的关系,java的编译流程和执行流程,让您轻松入门。第2章 字节码文件,深入剖析字节码文件的全部组成结构,以及javap和jbe可视化反解析工具的使用。第3章 类的加载、解释、编译,本章节带你深入理解类加载器的分类、范围、双亲委托策略,自己手写类加载器,理解字节码解释器、即时编译器、混合模式、热点代码检测、分层编译等核心知识。第4章 内存模型,本章节涵盖JVM内存模型的全部内容,程序计数器、虚拟机栈、本地方法栈、方法区、永久代、元空间等全部内容。第5章 对象模型,本章节带你深入理解对象的创建过程、内存分配的方法、让你不再稀里糊涂。第6章 GC基础,本章节是垃圾回收的入门章节,带你了解GC回收的标准是什么,什么是可达性分析、安全点、安全区,四种引用类型的使用和区别等等。第7章 GC算法与收集器,本章节是垃圾回收的重点,掌握各种垃圾回收算法,分代收集策略,7种垃圾回收器的原理和使用,垃圾回收器的组合及分代收集等。第8章 GC日志详解,各种垃圾回收器的日志都是不同的,怎么样读懂各种垃圾回收日志就是本章节的内容。第9章 性能监控与故障排除,本章节实战学习jcmd、jmx、jconsul、jvisualvm、JMC、jps、jstatd、jmap、jstack、jinfo、jprofile、jhat总计12种性能监控和故障排查工具的使用。第10章 阿里巴巴Arthas在线诊断工具,这是一个特别小惊喜,教您怎样使用当前最火热的arthas调优工具,在线诊断各种JVM问题。第11章 故障排除,本章会使用实际案例讲解单点故障、高并发和垃圾回收导致的CPU过高的问题,怎样排查和解决它们。课程资料课程带配套项目源码2个159页高清PDF理论篇课件1份89页高清PDF实战篇课件1份Unsafe源码PDF课件1份class_stats字段说明PDF文件1份jcmd Thread.print解析说明文件1份JProfiler内存工具说明文件1份字节码可视化解析工具1份GC日志可视化工具1份命令行工具cmder 1份学习方法理论篇部分推荐每天学习2课时,可以在公交地铁上用手机进行学习。实战篇部分推荐对照视频,使用配套源码,一边练习一遍学习。课程内容较多,不要一次性学太多,而是要循序渐进,坚持学习。      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flydean程序那些事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值