JVM-JVM调优基础(理论)

申明:文章内容是本人学习极客时间课程所写,作为笔记进行记录,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。
原资料地址:课程资料

JVM参数

标准参数

定义:稳定的参数不会随着Java版本的变化而变化。通常以 短横线开头,可以通过java -help 查看

java -version

在这里插入图片描述

非标准参数

定义:以-X开头,是标准参数的扩展。表示在将来的JVM版本中可能会发生改变,但是这类以-X开始的参数变化比较小。通过java -X 查看
在这里插入图片描述
比较常见的非标准参数:

  1. -Xms堆最小值:默认值是总内存/64(且小于1G),默认情况下,当堆中可用内存小于40%(-XX: MinHeapFreeRatio调整)时,堆内存会开始增加,一直增加到-Xmx大小。
  2. -Xmx堆最大值:默认值是总内存/64(且小于1G),如果Xms和Xmx都不设置,则两者大小会相同,默认情况下,当堆中可用内存大于70%时,堆内存会开始减少,一直减小到-Xms的大小;
  3. -Xmn新生代内存:默认是整堆的1/3,包括Eden区和两个Survivor区的总和,写法如: -Xmn1024,-Xmn1024k,-Xmn1024m,-Xmn1g 。新生代按整堆的比例分配,所以,此值不建议设置!
  4. -Xss线程栈内存:默认1M,一般来说是不需要改的。
  5. 打印GC日志·-Xloggc:file与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中。
不稳定参数

这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。
不稳定参数以-XX 开头,此类参数的设置很容易引起JVM 性能上的差异,使JVM存在极大的不稳定性。如果此类参数设置合理将大大提高JVM的性能及稳定性。
不稳定参数分为三类:

  • 性能参数:用于JVM的性能调优和内存分配控制,如内存大小的设置;
  • 行为参数:用于改变JVM的基础行为,如GC的方式和算法的选择;
  • 调试参数:用于监控、打印、输出jvm的信息;

不稳定参数语法规则:

  1. 布尔类型参数值:
    -XX:+
    '+'表示启用该选项
    -XX:-
    '-'表示关闭该选项
    示例:-XX:+UseG1GC:表示启用G1垃圾收集器
  2. 数字类型参数值:
    -XX:
    =给选项设置一个数字类型值,可跟随单位,例如:'m’或’M’表示兆字节;'k’或’K’千字节;'g’或’G’千兆字节。32K与32768是相同大小的。
    示例:-XX:MaxGCPauseMillis=500 :表示设置GC的最大停顿时间是500ms
  3. 字符串类型参数值:
    -XX:
    =给选项设置一个字符串类型值,通常用于指定一个文件、路径或一系列命令列表。
    示例:-XX:HeapDumpPath=./dump.core
    常用的不稳定参数:
    -XX:+UseSerialGC 配置串行收集器
    -XX:+UseParallelGC 配置PS并行收集器
    -XX:+UseParallelOldGC 配置PO并行收集器
    -XX:+UseParNewGC 配置ParNew并行收集器
    -XX:+UseConcMarkSweepGC 配置CMS并行收集器
    -XX:+UseG1GC 配置G1并行收集器
    -XX:+PrintGCDetails 配置开启GC日志打印
    -XX:+PrintGCTimeStamps 配置开启打印GC时间戳
    -XX:+PrintGCDateStamps 配置开启打印GC日期
    -XX:+PrintHeapAtGC 配置开启在GC时,打印堆内存信息

什么时候进行JVM调优?

  1. 系统吞吐量下降与响应延迟(P99);
  2. Heap内存(老年代)持续上涨至出现OOM;
  3. Full GC 次数频繁;
  4. GC 停顿过长(超过1秒);
  5. 应用出现OutOfMemory 等内存异常;
  6. 应用中有使用本地缓存且占用大量内存空间;

调优调什么?
内存分配 + 垃圾回收

  • 合理使用堆内存
  • GC高效回收占用的内存的垃圾对象
  • GC高效释放掉内存空间

JVM实践调优主要步骤
第一步:监控分析GC日志
第二步:判断JVM问题:
如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化
如果GC时间超过1秒,或者频繁GC,则必须优化。
第三步:确定调优目标
第四步:调整参数
调优一般是从满足程序的内存使用需求开始,之后是时间延迟需求,最后才是吞吐量要求,要基于这个步骤来不断优化,每一个步骤都是进行下一步的基础,不可逆行之。
第五步:对比调优前后差距
第六步:重复:1、2、3、4、5步骤
找到最佳JVM参数设置
第七步:应用JVM参数到应用服务器:
找到最合适的参数,将这些参数灰度发布一部分机器,观察一段时间。
如果,观察结果可以验证方案的价值,则进行全量发布!

这是一些调优的基础知识和方法论,真正的能够调优还是要结合实际情况去练习,后续会单独写文章来记录调优的案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/259141.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯:C++排序

排序 排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。 第(3)种排序算法不是基于比较的,而是对数值按位划分,按照以空间换取时间的思路来排序。看起来它们的复杂度更好,但实际…

ADC--模拟量转换成数字量

目录 一、ADC硬件组成七大部分: 二、单次转换,连续转换,不连续采样模式,扫描模式区别 1、举例(5种组合情况) 2、模拟看门狗中断的作用: 三、MCU使用ADC步骤 一、ADC硬件组成七大部分: ①输入电压&#…

Java数字孪生智慧工地数据大屏APP项目源码

目录 智慧工地云平台核心功能 1.劳务管理 2.视频监控 3.安全教育 4.进度管理 5.环境监测 6.塔吊监控 7.升降机监控 8.工地广播 9.深基坑高支模 10.AI识别 11.安全质量 智慧工地建设的价值和意义 危大工程管理 智慧工地聚焦施工现场一线生产活动,利用物…

使用Python生成二维码的完整指南

无边落木萧萧下,不如跟着可莉一起游~ 可莉将这篇博客收录在了:《Python》 可莉推荐的优质博主首页:Kevin ’ s blog 本文将介绍如何使用Python中的qrcode库来生成二维码。通过简单的代码示例和详细解释,读者将学习如何在Python中轻…

数据结构-双指针法

介绍 双指针法是一种可以在O(n)时间复杂度内解决数组、链表、字符串等数据结构相关的问题的方法。核心思想为使用两个指针在不同位置遍历数组或链表,从而实现特定操作。 常见的双指针法有 1.快慢指针:快指针每次移动两步&…

单测的思路

文章目录 单测的分类方法的单测生成工具的对比生成步骤 接口的单测mock步骤部分依赖mock的方式 场景的单测参考 单测的分类 单元测试(Unit Testing)是一种软件开发中的测试方法,它的主要目的是确保软件中的最小可测试单元(通常是…

(07)Hive——窗口函数详解

一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路: LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…

英文论文(sci)解读复现【NO.21】一种基于空间坐标的轻量级目标检测器无人机航空图像的自注意

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

红队笔记Day3-->隧道上线不出网机器

昨天讲了通过代理的形式(端口转发)实现了上线不出网的机器,那么今天就来讲一下如何通过隧道上线不出网机器 目录 1.网络拓扑 2.开始做隧道?No!!! 3.icmp隧道 4.HTTP隧道 5.SSH隧道 1.什么…

探索未来科技前沿:深度学习的进展与应用

深度学习的进展 摘要:深度学习作为人工智能领域的重要分支,近年来取得了巨大的进展,并在各个领域展现出惊人的应用潜力。本文将介绍深度学习的发展历程、技术原理以及在图像识别、自然语言处理等领域的应用,展望深度学习在未来的…

RunnerGo:UI自动化测试神器!

UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势,包括提高测试效率、减少人力成本、提升软件质量等。同时,可视化工具为UI自动化测试带来了更多便利和灵活性。RunnerGo近期上线脚本录制器,根据你的测试操作直接…

React 更改程序入口点(index.js文件位置变更)

食用前提示:本文基于已经快速配置好的React环境而作,配置React环境详见拙作:React环境配置-CSDN博客~ 一、了解默认入口点 使用create-react-app快速搭建react环境后,npm start启动程序的默认入口点为/src/index(即src目录下的ind…

【Prometheus】组件介绍-工作流程-部署模式-数据类型-监控

基于Prometheus和K8S构建智能化告警系统 一、Prometheus简介二、Prometheus特点于样本2.1、特点2.2、样本 三、Prometheus组件介绍四、Prometheus工作流程五、Prometheus的几种部署模式5.1、基本高可用模式5.2、基本高可用远程存储5.3、基本高可用远程存储联邦集群 六、Prometh…

ESP32工程中CMake使用及加入第三方SDK库文件

1、ESP32工程结构 本文中使用的是乐鑫官方推出的ESP-IDF v5.1对ESP32S3设备开发,并非是Arduino、Micro-python等第三方工具开发。在ESP-IDF框架中,乐鑫官方已经将CMake 和 Ninja 编译构建工具集成到了ESP-IDF中。 ESP-IDF 即乐鑫物联网开发框架&#xff…

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样,卷积神经网络依然是一个层级网络,只不过层的功能和形式发生了变化。 典型的CNN结构包括: 数据输入层(Input Layer)卷积层(Convolutional Layer&#x…

第11章 GUI

11.1 Swing概述 Swing是Java语言开发图形化界面的一个工具包。它以抽象窗口工具包(AWT)为基础,使跨平台应用程序可以使用可插拔的外观风格。Swing拥有丰富的库和组件,使用非常灵活,开发人员只用很少的代码就可以创建出…

力扣OJ题——旋转数组

题目:189.旋转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数 思路一: 1.每次挪动旋转1位(用tmp将最后一位存起来,其余所有数据向后移,然后将tmp放在第一个位…

Python编程中的异常处理

什么是异常? 程序错误(errors)有时也被称为程序异常(exceptions),这是每个编程人员都会经常遇到的问题。在过去,当遇到这类情况时,程序会终止执行并显示错误信息,通常是…

Qt:Qt3个窗口类的区别、VS与QT项目转换

一、Qt3个窗口类的区别 QMainWindow:包含菜单栏、工具栏、状态栏 QWidget:普通的一个窗口,什么也不包括 QDialog:对话框,常用来做登录窗口、弹出窗口(例如设置页面) QDialog实现简易登录界面…

力扣经典题:环形链表的检测与返回

1.值得背的题 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode*fasthead;struct ListNode*slowhead;while(fast!NULL&&fast->…