被虐后,分享一点点JVM调优原理相关的知识和经验

怕什么真理无穷进一步有近一步的欢喜‍‍本文只介绍一些原理和思路的内容,希望对你与所帮助!‍‍先了解原理,然后在进行调优。一定要记住的是任何的调优都不是一蹴而就,不要指望改动一个参数就达到调…

大家好,又见面了,我是全栈君。

怕什么真理无穷

进一步有近一步的欢喜

‍

‍本文只介绍一些原理和思路的内容,希望对你与所帮助!‍

‍

先了解原理,然后在进行调优。
一定要记住的是任何的调优都不是一蹴而就,不要指望改动一个参数就达到调优的目的,也不要仅仅改动了一个参数,就认为是做了调优。调优是在已有的资源和要达到的目标的前提上,进行权衡。

从类加载到整个JVM的运行周期内大致流程和结构如下:

                      

被虐后,分享一点点JVM调优原理相关的知识和经验

从上图可以看到,JVM 可以划分为这些部分:

执行引擎,包括:GC、JIT 编译器

类加载子系统,这部分的问题,一般在开发过程中出现

JNI 部分,这部分问题一般在 JVM 之外

运行时数据区;Java 将内存分为 2 大块:堆内存和栈内存

首先我们要对上述的内容有一定的了解,从全局出发。看了上图,在调优中我们能做的也就是对运行时数据区进行一些操作,然后选择执行引擎用何种垃圾收集器对垃圾进行回收。

1、本文调优思路只针对JVM1.8,先看下JVM1.8内存模型

被虐后,分享一点点JVM调优原理相关的知识和经验

被虐后,分享一点点JVM调优原理相关的知识和经验

注意:JVM 线程占用的是系统空间,所以当JVM的堆内存越大,系统本身的内存就越少,自然可生成的线程数量就越少。

2、JVM调优,主要从两个方面考虑:堆内存大小配置和垃圾回收算法选择

# 设置堆内存
-Xmx4g -Xms4g 
# 指定 GC 算法
-XX:+UseG1GC -XX:MaxGCPauseMillis=50 
# 指定 GC 并行线程数
-XX:ParallelGCThreads=4 
# 打印 GC 日志
-XX:+PrintGCDetails -XX:+PrintGCDateStamps 
# 指定 GC 日志文件
-Xloggc:gc.log 
# 指定 Meta 区的最大值
-XX:MaxMetaspaceSize=2g 
# 设置单个线程栈的大小
-Xss1m 
# 指定堆内存溢出时自动进行 Dump
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/usr/local

3、JVM – GC类型组合以及适用场合

垃圾回收,分为Young区垃圾回收器,以及Old区垃圾回收器两部分,两部分需要组合使用:

新生代收集器:Serial、ParNew、Parallel Scavenge;

老年代收集器:Serial Old、Parallel Old、CMS;

被虐后,分享一点点JVM调优原理相关的知识和经验

serial:新生代收集器,是最早出现最成熟的收集器,单线程,独占式,GC时会stop the world 应用暂停。

ParNew :新生代收集器,是Serial 收集器的多线程版本,独占式,同样地GC时会stop the world 应用暂停。

Parallel Scavenge:新生代收集器, 独占式, 与ParNew相似,特点:吞吐量优先

CMS:(concurrent-mark-sweep),老年代收集器,非独占式,多个线程,标记并清除算法,响应时间优先,缺点是GC后不进行内存整理,会有内存碎片。

Serial Old:是Serial 的老年代版本,同样是单线程收集器, 独占式

Parallel Old  是Parallel Scavenge 收集器的老年代版本,多线程收集, 独占式

G1:备受期待的新一代垃圾收集器,可预测的停顿:这又是G1相对于CMS的一大优势,结合了Parallel Scavenge以及CMS两种收集器的优点,又摒弃了其缺陷, 非独占式

被虐后,分享一点点JVM调优原理相关的知识和经验

收集器的好坏,主要有两个指标:停顿时间和吞吐量

GC 选择的经验总结

在、被虐后,分享一点点JVM调优原理相关的知识和经验

综合来看,G1 是 JDK11 之前 HotSpot JVM 中最先进的准产品级(production-ready) 垃圾收集器。重要的是,HotSpot 工程师的主要精力都放在不断改进 G1 上面。在更新的 JDK 版本中,将会带来更多强大的功能和优化。

可以看到,G1 作为 CMS 的代替者出现,解决了 CMS 中的各种疑难问题,包括暂停时间的可预测性,并终结了堆内存的碎片化。对单业务延迟非常敏感的系统来说,如果 CPU 资源不受限制,那么 G1 可以说是 HotSpot 中最好的选择,特别是在最新版本的 JVM 中。当然这种降低延迟的优化也不是没有代价的:由于额外的写屏障和守护线程,G1 的开销会更大。如果系统属于吞吐量优先型的,又或者 CPU 持续占用 100%,而又不在乎单次 GC 的暂停时间,那么 CMS 是更好的选择。

总之,G1 适合大内存,需要较低延迟的场景。

选择正确的 GC 算法,唯一可行的方式就是去尝试,并找出不合理的地方,一般性的指导原则:

  • 如果系统考虑吞吐优先,CPU 资源都用来最大程度处理业务,用 Parallel GC;

  • 如果系统考虑低延迟有限,每次 GC 时间尽量短,用 CMS GC;

  • 如果系统内存堆较大,同时希望整体来看平均 GC 时间可控,使用 G1 GC。

对于内存大小的考量:

  • 一般 4G 以上,算是比较大,用 G1 的性价比较高。

  • 一般超过 8G,比如 16G-64G 内存,非常推荐使用 G1 GC。

最后讨论一个很多开发者经常忽视的问题,也是面试大厂常问的问题:

JDK 8 的默认 GC 是什么?

很多人或觉得是 CMS,甚至 G1,其实都不是。

答案是:JDK 8并行 GC 是 JDK8 里的默认 GC 策略。默认使用的是 Parallel Scavenge (新生代) 和 Parallel Old (老年代),基于我的Jdk 1.8.0_181-b13版本

注意,G1 成为 JDK9 以后版本的默认 GC 策略,同时,ParNew + SerialOld 这种组合不被支持。

最后在分享一下,调优后如果还遇到JVM相关问题,请记住十六字箴言:做好监控,定位问题,验证结果,总结归纳。

tips:最近很多伙伴后台留言说准备换新地方体验【拧螺丝】的工作了,

但是没有好的【造火箭】的资料,这不,特意整理了一份,内容非常丰富,包括大厂Java面试资料和经验总结,后台回复【造火箭】获取资料

See you next good day~

被虐后,分享一点点JVM调优原理相关的知识和经验

被虐后,分享一点点JVM调优原理相关的知识和经验

不定期分享干货技术/
【
秘籍】
,每天进步一点点
小的积累,能带来大的改变

 被虐后,分享一点点JVM调优原理相关的知识和经验

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120958.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 互联网java软件工程师

    互联网java软件工程师职位诱惑:高并发,分布式,氛围好,待遇不错职位描述:岗位职责:1、负责公司支付、推荐、云服务、应用商店、账号、开发者平台、论坛等系统的分析设计、开发实现和持续改善;2、参与产品分析和规划,完善和优化开发过程;3、研究和实践相关技术及实现原理。岗位要求:1、本科及以上学历,3年以上java开发经验;2、精通Java语言,熟练掌握JavaWEB

    2022年9月15日
  • vue.cli项目封装全局axios,封装请求,封装公共的api和调用请求的全过程[通俗易懂]

    vue.cli项目封装全局axios,封装请求,封装公共的api和调用请求的全过程[通俗易懂]vue项目的前期配置封装axios实例封装API

    2022年6月11日
  • linux系统抓包工具_kali 抓包

    linux系统抓包工具_kali 抓包在使用ECS服务器时,发现网络流量异常,或者发现服务器有异常向外发包行为,可使用抓包工具抓取网络流量包,分析流量包的特征,看看这些流量包来自哪里,或者发向哪里了。根据这些信息,可进一步诊断异常。本文介绍Linux系统,使用tcpdump工具分析流量的方法。TcpDump可将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、not、or等逻…

    2022年8月21日
  • 区块链P2P网络协议演进过程[通俗易懂]

    区块链P2P网络协议演进过程[通俗易懂]区块链是以加密机制、储存机制、共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能。区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服务,实现中心化系统中类似金融中介机构的功能。共识机制是网络大部分节点在约定时间段内对交易状态达成相同的确认,其中共识性通过工作量证明(POW)、权益证明(POS)、实用拜占庭容错(PBFT)等多种共识算法实现。而一致性则要求大部分节点在约定时间段内保持数据内容一致,从而利用共识算法实现共识。传统中心化网络系统需

    2022年10月8日
  • 计算机保护插件无法安装,电脑无法安装ActiveX控件怎么办「建议收藏」

    计算机保护插件无法安装,电脑无法安装ActiveX控件怎么办「建议收藏」ActiveX控件是网站常用的一款网页辅助工具,有时候我们可能需要安装它,但是却发现浏览器阻止了它安装,那么你知道电脑无法安装ActiveX控件怎么办吗?下面是学习啦小编整理的一些关于电脑无法安装ActiveX控件的相关资料,供你参考。电脑无法安装ActiveX控件的解决方法:1、首先建议将相应网站加入可信站点。2、其次建议选中可信站点。自定义级别——找到“下载未签名的ActiveX控件”——选中…

    2022年5月14日
  • Vue生成二维码_vue实现扫描二维码

    Vue生成二维码_vue实现扫描二维码效果代码npminstallvue-qr–save<template><divclass=”sg-qrcode”><vue-qr:text=”qrcodeText”:correctLevel=”3″:size=”250″:margin=”10″colorDark=”#2ba245″

    2022年10月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号