当前位置: 首页 > 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、 性能调优实战**

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

** 优化前 **

在这里插入图片描述

** 优化后 **

在这里插入图片描述

总结

在这里插入图片描述

相关文章:

  • Spring Boot 版本与对应 JDK 版本兼容性
  • 雨滴传感器详解(STM32)
  • Sharding-JDBC 系列专题 - 第二篇:广播表(Broadcast Tables)
  • VuePress 使用教程:从入门到精通
  • 算法题(129):二维前缀和
  • RHCSA Linux 系统文件内容显示2
  • FPGA学习(五)——DDS信号发生器设计
  • 国产动漫记录
  • LangChain4j语言模型选型指南:主流模型能力全景对比
  • FreeRTOS中断管理
  • 【Agent】AI智能体评测基座AgentCLUE-General
  • python解压复制文件
  • Python多进程并发编程:深入理解Lock与Semaphore的实战应用与避坑指南
  • 【每日八股】复习 Redis Day1:Redis 的持久化(上)
  • 力扣DAY60-61 | 热100 | 回溯:单词搜索、分割回文串
  • 二、在springboot 中使用 AIService
  • 第38讲|AI + 农业病虫害预测建模
  • 2025-04-20 李沐深度学习4 —— 自动求导
  • 【Linux】清晰思路讲解:POSIX信号量、基于环形队列的生产消费模型、线程池。
  • 基于 Elasticsearch 8.12.0 集群热词实现
  • 北京市平谷区政协原主席王春辉接受纪律审查和监察调查
  • 韩国检方以受贿嫌疑起诉前总统文在寅
  • 富力地产:广州富力空港假日酒店第一次拍卖流拍,起拍价约2.77亿元
  • 特斯拉季度利润暴跌71%,马斯克下月开始大幅减少为政府工作时间
  • 白宫新闻秘书:美政府将在法庭上回应哈佛大学诉讼
  • 广西大部气象干旱已达特旱