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

JVM 基础

目录

导图

总览

Java虚拟机运行时数据区

初识JVM

Java虚拟机的组成

字节码文件详解

正确打开字节码

字节码文件的组成

基础信息

常量池

方法

字节码常用工具的使用

类的生命周期

 简介

加载阶段

连接阶段

验证

准备

解析

初始化阶段

类加载器

  类加载器的分类

启动类加载器 

默认加载器 

双亲委派

   机制

打破双亲委派机制 *

自定义类加载器

线程上线文类加载器

Osgi框架的类加载器(了解)

JDK9之后的类加载器

总结

运行时数据区

程序计数器

局部变量表

操作数栈

栈内存溢出

堆内存

方法区

实现

字符串常量池

直接内存

总结

自动垃圾回收

介绍

方法区的回收

堆回收

引用计数法和可达性分析法

五种对象引用

软引用

弱引用

虚引用和终结器引用

垃圾回收算法

评价标准

标记回收算法

复制算法

标记整理算法

分代垃圾回收算法-GC算法*

垃圾回收器

预热

Serial 垃圾回收器

年轻代 PaNew 垃圾回收器

老年代 CMS 垃圾回收器

年轻代 Parallel Scavenge 垃圾回收器-JDK8默认

老年代 Parallel Old 回收器-JDK8默认

G1 垃圾回收器-JDK9默认



导图

总览

初识JVM

然后将字节码交给计算机执行

 

Java虚拟机的组成

字节码文件详解

正确打开字节码

jclasslib工具的Github地址: https://github.com/ingokegel/jclasslib

字节码文件的组成

基础信息

常量池

方法

字节码常用工具的使用

 Arthas功能很强大,具体功能和命令可到官网查看
 Arthas(阿尔萨斯)官网文档:https://arthas.aliyun.com/doc/

类的生命周期

 简介

加载阶段


在代码使用反射获取对象信息就是在方法区中拿的

方法区中的 InstanceKlass 是C++编写的,无法Java语音调用,在堆区中转成Java类型的;
每个类在方法区和堆区中都分别对应一个 InstanceKlass 对象和 java.lang.Class 对象;
InstanceKlass保存类的元数据,java.lang.Class 对象是根据InstanceKlass生成的,是一个简化版的 InstanceKlass(去除了一些对开发者无用的元数据) 

连接阶段

验证

准备

解析

初始化阶段

静态块在类被加载时执行,并且只执行一次,输出D
main方法执行第一行,输出A
初始化类Test1,先执行其他代码块后执行构造方法,输出CB
又初始化类Test1,先执行其他代码块后执行构造方法,输出CB

类加载器

  类加载器的分类

启动类加载器 

默认加载器 

双亲委派

   机制

                

其实就是自底向上查找是否加载过,自顶向下加载

打破双亲委派机制 *
自定义类加载器

线程上线文类加载器


DriverManager 是JDK提供的

Osgi框架的类加载器(了解)

JDK9之后的类加载器

总结

运行时数据区

程序计数器


随着线程被销毁,线程不共享的内存也会被释放


字节码指令写字节码文件中,当文件被加载之后字节码指令就会被保存在内存中,而程序计数器就算记录下一次执行的字节码指令所在的内存地址

局部变量表

操作数栈

栈内存溢出


一般建议使用 -Xss 的方式设置

堆内存

方法区

实现


InstanceKlass 对象中的常量池和方法其实会额外开辟一个内存来存储,InstanceKlass对象只是存放了引用

字符串常量池


a + b  底层是 StringBuilder ,结果对象存放在堆中,所有上述代码结果是 false 

而 "1" + "2" 在编译阶段会直接将其替换为 "12" , 而 "12" 在常量池冲存放,所有运行结果我 true

直接内存


当 jvm正在回收堆中对象的时候,如果用户正在使用我们的系统,可能会出现卡顿的情况

总结

1、程序计数器:每个线程会通过程序计数器记录当前要执行的的字节码指令的地址,程序计数器        可以控制程序指令的进行实现分支、跳转、异常等逻辑(不会出现内存泄漏)。

2、虚拟机栈:虚拟机栈采用栈的数据结构来管理 方法调用中的基本数据(局部变量、操作数等),        每一个方法的调用使用一个栈帧来保存。

3、堆:堆中存放的是创建出来的对象,这也是最容易产生内存溢出的位置。

4、方法区:方法区中主要存放的是类的元信息,同时还保存了常量池,JDK8是使用了元空间,          保存在直接内存。

自动垃圾回收

介绍

         

方法区的回收

堆回收

引用计数法和可达性分析法

五种对象引用

软引用

弱引用

虚引用和终结器引用

垃圾回收算法

评价标准

标记回收算法

复制算法

标记整理算法

分代垃圾回收算法-GC算法*


这个年轻代的GC用的是复制算法,这个S0和S1统称Survivor区

垃圾回收器

预热

Serial 垃圾回收器

年轻代 PaNew 垃圾回收器

老年代 CMS 垃圾回收器


只有在初始标记和重新标记中用户线程会停下来,且时间非常短

年轻代 Parallel Scavenge 垃圾回收器-JDK8默认

老年代 Parallel Old 回收器-JDK8默认

G1 垃圾回收器-JDK9默认



G1 垃圾回收器在 jdk8 相对成熟,但仍有不足之处,在 jdk9 中得到完善


文章转载自:

http://6E7V1FDS.nspbj.cn
http://8x6tn5mW.nspbj.cn
http://L6tpevE0.nspbj.cn
http://gqFqQHDB.nspbj.cn
http://XUsdpStN.nspbj.cn
http://98eXd1hD.nspbj.cn
http://JuNHLzwO.nspbj.cn
http://pgiri0Mg.nspbj.cn
http://5VFuyxvK.nspbj.cn
http://LzOu7dmT.nspbj.cn
http://6uPPsvl2.nspbj.cn
http://MfwOlLOb.nspbj.cn
http://FSnJINWZ.nspbj.cn
http://D5UtD6hv.nspbj.cn
http://dKNI8dR9.nspbj.cn
http://2SDg4MSI.nspbj.cn
http://5cGwGv6k.nspbj.cn
http://TFDQZ4mQ.nspbj.cn
http://fQUtirTH.nspbj.cn
http://TxBmWkUA.nspbj.cn
http://D0Kp7zSl.nspbj.cn
http://03wB5pW4.nspbj.cn
http://qKfvbhgd.nspbj.cn
http://LqLeDuvY.nspbj.cn
http://MZQ2g2xT.nspbj.cn
http://VGgGEOb5.nspbj.cn
http://lTNQHFQT.nspbj.cn
http://BKRzCsb8.nspbj.cn
http://uj4gs8bQ.nspbj.cn
http://jsKnks32.nspbj.cn
http://www.dtcms.com/a/378913.html

相关文章:

  • 计算智能的概念和其算法的主要算法类型
  • leetcode25(有效的字母异位词)
  • [Windows] FileOptimizer v17.1.0_一款文件批量压缩工具
  • 淘宝/天猫按图搜索(拍立淘)item_search_img API接口实战指南
  • Java优选算法——二分查找
  • leetcode380:RandomizedSet - O(1)时间插入删除和获取随机元素(数组+哈希表的巧妙结合)
  • 经典蓝牙的 BR(Basic Rate(基础速率))
  • 牛客周赛 Round 108题解
  • Rocky9.0去堆叠双发arp(支持“ARP 广播双发”)
  • 「京墨」1.15.0 诗词、成语、对联、句子、诗歌…
  • AWS TechFest 2025: 风险模型的转变、流程设计的转型、生成式 AI 从实验走向实施的三大关键要素、评估生成式 AI 用例的适配度
  • 【Blender】二次元人物制作【二】:五官的制作
  • MinIO集群部署详细步骤(高性能的分布式对象存储系统)
  • 带地图的 RAG:多模态 + 地理空间 在 Elasticsearch 中
  • 使用 Spring AI Alibaba Graph 实现工作流
  • 【Debug日志 | DDP 下 BatchNorm 统计失真】
  • linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)
  • 综合文化信息管理系统|基于java和小程序的综合文化信息管理系统设计与实现(源码+数据库+文档)
  • 20250911_10.1.11.46车辆定位aidata-01_Apache Doris分布式数据库全量备份(本地+异地)Python脚本
  • DenseNet网络
  • 2025胶水分装机服务商技术解析:聚焦高精度、智能化应用
  • Drawnix白板本地部署指南:cpolar实现远程创意协作
  • leetcode189.轮转数组
  • SPI设备驱动
  • 第七节,探索 ​​CSS 的高级特性、复杂布局技巧、性能优化以及与现代前端工作流的整合(二)
  • O3.2 opencv高阶
  • c语言,识别到黑色就自动开枪,4399单击游戏狙击战场,源码分享,豆包ai出品
  • Spring Boot 原理与性能优化实战
  • PHP 性能优化实战 OPcache + FPM 极限优化配置
  • solidity的高阶语法(完结篇)