JVM调优笔记

news2024/11/28 14:50:20

双亲委派机制

app---->ext----->bootstrap 保证系统的核心库不被修改

沙箱安全机制

限制系统资源访问,将java代码限制在虚拟机特定的运行范围中

基本组件
  • 字节码校验器 确保java类文件遵循java规范,帮助java程序实现内存保护
  • 类加载器

native

Java的作用范围达不到了,需要调用底层

栈内存主管程序的运行,生命周期和线程同步

对象的实例化过程

Heap 一个JVM只有一个堆内存,堆内存的大小可调节
堆: 类、方法、常量、变量、引用类型的真实对象

gc的垃圾回收主要是在eden和old区域。
默认情况下,分配的总内存是电脑内存的1/4, 初始化内存是1/64

public class JvmTest {

  public static void main(String[] args) {
    long maxMemory = Runtime.getRuntime().maxMemory();
    long totalMemory = Runtime.getRuntime().totalMemory();
    // maxMemory: 3.56GB
    // totalMemory: 245.5MB
    // -Xmx1024m -Xmx1024m -XX:+PrintGCDetails
    // +HeapDumpOnOutOfMemoryError
    System.out.println("maxMemory: " + FileUtil.formatFileSize(maxMemory) + "\ntotalMemory: " + FileUtil.formatFileSize(totalMemory));
  }

}

JVM问题排查

Arthas

Minor GC、Major GC和full GC的区别

  • MInor GC 新生代收集,非常的频繁,回收的速度快
  • Old GC 老年代收集,CMS收集器单独收集老年代的行为
  • Full GC 整堆收集 对整个java堆和方法区的垃圾收集
  • Mixed GC 混合收集,收集整个新生代和老年代,目前只有G1收集器

JVM 调优工具

jps

查看java的进程
image.png
image.png

-q 输出进程号
-m 输出传递给主函数的参数
-l 主函数的路径
jstat

查看堆信息

options:由以下值构成
-class:显示ClassLoader的相关信息
-compiler:显示JIT编译的相关信息
-gc:显示与GC相关信息
-gccapacity:显示各个代的容量和使用情况
-gccause:显示垃圾收集相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因
-gcnew:显示新生代信息
-gcnewcapacity:显示新生代大小和使用情况
-gcold:显示老年代信息
-gcoldcapacity:显示老年代大小
-gcpermcapacity:显示永久代大小
-gcutil:显示垃圾收集信息

image.png

jinfo

查看运行的java程序的拓展参数,支持运行时,修改部分参数
image.png

jmap

查看堆内存使用
image.png

调优思路


运维团队配置的JVM参数已经能满足多数的需求,在个人理解下,JVM调优其实是在理解JVM内存结构以及各种垃圾收集器的前提下,结合现有的业务来调整参数,使应用稳定的运行。参考的指标【吞吐量】、【停顿时间】、【垃圾回收的频率】。

  1. 内存区域大小以及相关策略 (堆内存大小、新生代/老年代占比等—> IO密集型/内存计算密集型)
  2. 垃圾回收器,比如(-XX:+UseG1GC:指定 JVM 使用的垃圾回收器为 G1

-XX:MaxGCPauseMillis:设置目标停顿时间
-XX:InitiatingHeapOccupancyPercent:当整个堆内存使用达到一定比例,全局并发标记阶段 就会被启动等等 多数情况下,JVM已经能够达到开箱即用。

  1. jps查看进程的基础信息, jstat用于看GC的情况、jinfo进程参数、jmap内存信息 dump文件–>内存解析工具、jstak线程信息,排查死锁

JIT优化

内联优化和逃逸分析

内联优化

把目标方法的代码复制到调用的方法中,避免发生真实的方法调用。每次方法的调用都会生成栈帧(压栈出栈记录方法调用的位置),会带来一定的性能损耗。调整(-XX:MaxFreqInlineSize)

逃逸分析

判断一个对象是否被外部方法引用或者外部线程访问的分析技术。
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的北京集联软件科技有限公司信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

博客摘录「 MobaXterm登录密码重置」2023年9月21日

登录MobaXterm提示输入密码, 而且还 忘记密码 安装重置密码的工具 可以使用浏览器打开 如下网址: https://mobaxterm.mobatek.net/resetmasterpassword.html 打开如图: 下载MobaXterm软件密码重置工具,下载好并解压后 直接…

第二证券:创业板指失守2000点 算力概念股走势活跃

周三,沪深两市继续缩量震动调整,三大指数均小幅下跌,创业板指失守2000点整数关口,再创调整新低。到收盘,上证综指报3108.57点,跌0.52%;深证成指报10072.46点,跌0.53%;创业…

Python机器学习实战-特征重要性分析方法(1):排列重要性(附源码和实现效果)

实现功能 排列重要性 PermutationImportance:该方法会随机排列每个特征的值,然后监控模型性能下降的程度。如果获得了更大的下降意味着特征更重要 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomFore…

应用程序处理:TCP模块的处理

1、应用程序处理 首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能; 编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。 2、TCP 模块的处理 …

共聚焦显微镜在化学机械抛光课题研究中的应用

两个物体表面相互接触即会产生相互作用力,研究具有相对运动的相互作用表面间的摩擦、润滑与磨损及其三者之间关系即为摩擦学,目前摩擦学已涵盖了化学机械抛光、生物摩擦、流体摩擦等多个细分研究方向,其研究的数值量级也涵盖了亚纳米到百微米…

MYSQL不常用但好用写法

ORDER BY FIELD() 自定义排序逻辑 MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC,还可以通过 「ORDER BY FIELD(str,str1,…)」 自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示: ORDER BY FIELD(str,str1,…) …

【Excel加密】excel只读模式在哪里设置

Excel文件想要设置成只读模式,其实很简单,今天给大家分享四个excel设置只读模式的方法。 方法一:文件属性 右键点击文件,查看文件属性,在属性界面,勾选上只读属性就可以了。 方法二:始终以只读…

pixel2的root过程

用adb连接手机 首先学会用adb连接手机 可以配置在主机Windows和虚拟机上 手机打开设置,连续点击版本号进入开发者模式 点击进入开发者选项,允许USB调试,连接在电脑上,在手机授权对话框中允许电脑调试 连接完成后,输…

eslint代码校验及修复(Vue项目快速上手)

项目中配置eslint校验 文章目录 项目中配置eslint校验前言1. webpack5搭建 Vue项目如下🔗(可以查看)2. eslint+prettier Vue项目如下🔗(暂时未更新)一、什么是 ESLint?二、为什么要使用 ESLint?三、如何在 Vue 项目中集成 ESLint?3.1.安装依赖代码如下:如下图所示3…

视频定格合璧,批量剪辑轻松插入图片

大家好!想要将视频与图片完美融合吗?现在,我们为您推出一款强大的批量剪辑工具,让您能够轻松在图片中插入视频,让您的创作更加精彩动人! 首先,第一步我们要进入媒体梦工厂主页面,并…

Wolfram语言之父:ChatGPT到底能做什么? | 阿Q送书第六期

文章目录 那么,ChatGPT到底在做什么?它为什么能做到这些?前方的路为ChatGPT赋予“思想”留言提前获赠书 人类语言及其背后的思维模式在结构上比我们想象的更简单、更“符合规律”。 ChatGPT大火,甚至已经开始改变人类的工作和思考…

好用的Mac笔记本电脑文件清理工具CleanMyMac

Mac系统进行文件清理,一般是直接将文件拖动入“废纸篓”回收站中,然后通过清理回收站,就完成了一次文件清理的操作,但是这么做并无法保证文件被彻底删除了,有些文件通过一些安全恢复手段依旧是可以恢复的,那…

vue项目通过json-bigint在前端处理java雪花id过长导致失去精度问题

这里 我简单模仿了一个接口 这里 我单纯 返回一个long类型的雪花id 然后 前端 用 axios 去请求 大家知道 axios 会对请求数据做一次处理 而我们 data才是拿到我们java这边实际返回的东西 简单说 就是输出一下我们后端返回 的内容 这里 我们网络中显示的是 35866101868095488…

离散数学 学习 之一阶逻辑的前束范式

敲重点 如果是蕴含式的前件要改变符号,后件不需要

springboot导入excel(POI)

POI官方文档 引入依赖 <!--POI--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId&…

FOXBORO FBM230 P0926GU 数字量控制模块

FOXBORO FBM230 P0926GU 数字量控制模块是用于工业自动化和过程控制系统的模块之一&#xff0c;用于处理数字量信号&#xff0c;例如开关状态、传感器状态等。这些模块广泛应用于各种工业领域&#xff0c;包括但不限于以下应用领域&#xff1a; 工业自动化&#xff1a;在工业自…

<Altium Designer> 将.DSN文件导入并转换成SchDoc文件

目录 01 使用向导方式导入.DSN 02 消除Unique Identifiers Errors 03 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软件工程师。 本文主要是总结和分享将OrCAD Capture画的原理图文件(.DSN)导入到Altium Designer&#xff0c;转换成对应的原理图文件…

Linux(Centos7)中安装Docker和DockerCompose

一、安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支 持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频…

debug过程中,矩阵左乘右乘相关概念梳理

变换点或者变换向量 左乘 矩阵左乘通常是指对”目标点“进行左乘&#xff0c;即: A ′ R ∗ A AR*A A′R∗A 其中&#xff0c;A为原始3维点&#xff0c;表示一个3*1的列向量&#xff0c;R为33的旋转矩阵&#xff0c;A‘为变换后的点 B ′ T ∗ B BT*B B′T∗B 其中&#…