当前位置: 首页 > news >正文

JVM 学习

基础篇

在这里插入图片描述

Java 支持跨平台

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

字节码文件详解

1、 应用场景

在这里插入图片描述

版本冲突、系统升级

2、字节码 文件的组成

在这里插入图片描述

3、 打开 class字节码文件

在这里插入图片描述

4、 基础信息

在这里插入图片描述

在这里插入图片描述

解决版本不兼容

52-44=8 —>>>JDK8
RandomStringUtils 该字节码文件版本:1.8
运行时环境:JDK6 1.6
在这里插入图片描述

在这里插入图片描述

5、常量池

在这里插入图片描述

6、方法

在这里插入图片描述

7、 查看字节码 工具

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8、arthas

在这里插入图片描述

在这里插入图片描述

类加载

1、类的生命周期— 应用场景

在这里插入图片描述

在这里插入图片描述

2、 加载阶段

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、连接阶段

在这里插入图片描述

验证

在这里插入图片描述

准备

final 修饰的变量

在这里插入图片描述

在这里插入图片描述

初始化

在这里插入图片描述

在这里插入图片描述

运行时 数据区

1、应用场景

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、pc 程序计数器

在这里插入图片描述

3、栈

在这里插入图片描述

栈内存 也会溢出,stack over flow

在这里插入图片描述

在这里插入图片描述

4、堆内存

在这里插入图片描述

5、字符串 常量池

在这里插入图片描述

在这里插入图片描述

6、直接内存区域

在这里插入图片描述

总结:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

垃圾回收

在这里插入图片描述

在这里插入图片描述

1、引用计数法

在这里插入图片描述

2、可达性 分析法

在这里插入图片描述

在这里插入图片描述

** GC Root 对象**

在这里插入图片描述

查看GC Root

在这里插入图片描述

3、软引用

四种引用:强弱软虚

强引用:永远不回收

只有弱引用,没有其他 引用 指向该弱引用对象:GC触发就会回收,不管内存够不够

软引用:GC内存 不足时回收

在这里插入图片描述

调整 内存区域大小

在这里插入图片描述

对象在堆上的存储

在这里插入图片描述

在这里插入图片描述

JIT 即时编译器

在这里插入图片描述

ZGC

在这里插入图片描述

使用

在这里插入图片描述

实战篇

JVM实战篇工具
链接: https://pan.baidu.com/s/1KI04E4jNO4kAe9NlSreU4Q 提取码: yyds

在这里插入图片描述

Java 工具

在这里插入图片描述

在这里插入图片描述

内存调优

1、 内存泄露

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、Arthas 查看内存情况

3、 常见场景

内存泄露 常见场景

在这里插入图片描述

在这里插入图片描述

4、解决内存泄漏------->>>监控 top 命令

在这里插入图片描述

键盘按下 大写 M----->>>> 按照内存排序

5、解决内存泄漏------->>>监控 visual VM

在这里插入图片描述

6、 解决内存泄漏------->>>监控 arthas tunnel

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


<dependency><groupId>com.taobao.arthas</groupId><artifactId>arthas-spring-boot-starter</artifactId><version>3.7.1</version>
</dependency>

arthas:# tunnel地址,目前是部署在同一台服务器,正式环境需要拆分tunnel-server: ws://localhost:7777/ws# tunnel显示的应用名称,直接使用应用名app-name: ${spring.application.name}# arthas http访问的端口和远程连接的端口http-port: 8888telnet-port: 9999

部署 tunnel 服务端程序


nohup java -jar -Darthas.enable-detail-pages=true   arthas-tunnel-server-3.7.1-fatjar.jar &

启动 Java应用


nohup java -jar -Dserver.port=8082 -Darthas.http-port=3662 -Darthas.telnet-port=8566 jvm-optimize-0.0.1-SNAPSHOT.jar  &

查看 tunnel

在这里插入图片描述

在这里插入图片描述

7、 解决内存泄漏------->>>监控 Prometheus + Grafana 最终手段

在这里插入图片描述


<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><exclusions>	<!-- 去掉springboot默认配置 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency><!-- 暴露给 Prometheus  --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><scope>runtime</scope>
</dependency>

management:endpoint:metrics:enabled: true #支持metricsprometheus:enabled: true #支持Prometheusmetrics:export:prometheus:enabled: truetags:application: jvm-test #实例名采集endpoints:web:exposure:include: '*' #开放所有端口

在这里插入图片描述

阿里云

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8、 内存泄露 原因------代码中的内存泄露

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

9、 内存溢出

在这里插入图片描述

在这里插入图片描述

还原 高并发请求导致的 内存溢出问题

在这里插入图片描述
启动程序

JMeter测试

在这里插入图片描述

在这里插入图片描述

10、内存溢出------>>> 诊断 MAT

在这里插入图片描述

** 打开 hprof 文件**

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

11、 服务器 ** 导出 运行中的系统的内存快照 并进行分析**

在这里插入图片描述

jmap -dump:live,format=b,file=/usr/local/jvm/dump/jmap.hprof 2544893

在这里插入图片描述

内存泄露检测

在这里插入图片描述

在这里插入图片描述

** 分析 超大堆的内存快照**

在这里插入图片描述

在这里插入图片描述

案例实战

在这里插入图片描述

12、 查询大数据量导致的 内存溢出

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解决

在这里插入图片描述

13、Mybatis 导致的内存溢出

在这里插入图片描述

解决方案

将 IdList 放入Redis中,然后取出来,使用join() 方法,然后 传递字符串即可

 String par=" (1,2,3,4,5)";
void search(String val);
// 传入par
// #{val} 接收即可

在这里插入图片描述

14、 K8S 环境导出大文件 导致内存溢出

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

15、 ThreadLocal 使用时 占用大量内存

在这里插入图片描述

注意!!!!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

16、 接口导致的 内存溢出

在这里插入图片描述

在这里插入图片描述

设计 牛逼,防止丢失任务

** 队列 换成MQ 或者 Redis**

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在线定位问题

在这里插入图片描述

**17、 btrace 和 arthas 在线定位问题 **

在这里插入图片描述

** 按照 目录进行放置 **

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

** 步骤 **

在这里插入图片描述


stack 类名 方法名

在这里插入图片描述

GC 调优

在这里插入图片描述

核心 指标

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本地 安装 插件

Visual VM

在这里插入图片描述

在这里插入图片描述

Prometheus + Grafana

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

常见的 GC 模式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

常见 JVM 参数设置

在这里插入图片描述

1、 Xms Xmx

在这里插入图片描述

在这里插入图片描述

2、 MaxMetaSpaceSize

在这里插入图片描述

3、Xss 虚拟机栈 大小

在这里插入图片描述

4、不建议 手动设置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

垃圾回收器调优

在这里插入图片描述

在这里插入图片描述

parNew +CMS

在这里插入图片描述

G1

在这里插入图片描述

优化 垃圾回收器参数

在这里插入图片描述

实战:内存调优和GC调优

在这里插入图片描述

在这里插入图片描述

** 在线分析 HeapDump 文件**

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

在这里插入图片描述

在这里插入图片描述

性能问题 发现与解决

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

** 1、 CPU 占用很高 **

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后去 文件中搜索即可

在线分析

在这里插入图片描述

在这里插入图片描述

** 2、 接口 响应时间很长的 定位**

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

stop 结束监控

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

** 3、 火焰图 定位接口 响应时间长**

在这里插入图片描述

在这里插入图片描述


# 启动 arthas
java -jar arthas.jar
# 执行监控
profile start # 生成 火焰图
profile stop --format html

在这里插入图片描述

在这里插入图片描述

** 4、 死锁问题的 检测 **

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5、 基准 测试框架 JMH

在这里插入图片描述

在这里插入图片描述

JMH 介绍

在这里插入图片描述

环境搭建

在这里插入图片描述


mvn archetype:generate \
-DinteractiveMode=false \
-DarchetypeGroupId=org.openjdk.jmh \
-DarchetypeArtifactId=jmh-java-benchmark-archetype \
-DgroupId=org.sample \
-DartifactId=test \
-Dversion=1.0

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><jmh.version>1.37</jmh.version><javac.target>1.8</javac.target><uberjar.name>benchmarks</uberjar.name>
</properties>

一些问题

在这里插入图片描述

** 6、 性能调优实战**

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

** 优化前 **

在这里插入图片描述

** 优化后 **

在这里插入图片描述

总结

在这里插入图片描述

http://www.xdnf.cn/news/52021.html

相关文章:

  • SpringBoot集成Kafka详解
  • Python range 使用详解
  • P2505 [HAOI2012] 道路 Solution
  • 62页华为IPD-MM流程:市场调研理论与实践方案精读【附全文阅读】
  • Linux网络UDP与TCP
  • Matlab 五相电机仿真
  • Unity3D仿星露谷物语开发36之锄地动画2
  • DeepSeek 即将联合 vLLM 开源推理引擎
  • Chapter 3 Semiconductor Devices
  • Python多任务编程:进程全面详解与实战指南
  • RHCSA知识点
  • C++的spdlog异步日志windows配置教程
  • 10.QT-显示类控件|LCD Number|ProgressBar|Calendar Widget(C++)
  • CTGAN 合成数据生成与验证脚本学习笔记
  • StringEscapeUtils:给你的字符串穿上“防弹衣“——转义工具类深度解析
  • Spring Boot 实现定时任务的案例
  • Linux 学习 6 文件相关命令包含查询
  • String +memset字符串类题型【C++】
  • 从零创建 Docker 镜像(基于 OCI 格式)
  • 【kubernetes】pod资源配额
  • 016-C语言内存函数
  • 每日一题算法——链表相交
  • git学习日志
  • Java EE(20)——线程安全——ThreadLocal
  • 第36讲:作物生长预测中的时间序列建模(LSTM等)
  • buildroot构建根文件系统报错(已解决大部分问题)
  • Linux学习——Linux进程间通信(IPC)聊天程序实践
  • Android开发中广播(Broadcast)技术详解
  • 线程基础题
  • FOC控制中的正弦PWM和空间矢量PWM对比与理解