📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。
📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

🍊 JVM核心知识点
🎉 JVM定义与作用
Java虚拟机(JVM)是一个可以执行Java字节码的虚拟机。它模拟一个抽象的计算机,拥有自己的指令集和内存模型,能够在多种硬件和操作系统上运行。JVM的主要功能包括:
- 字节码执行:JVM负责将Java字节码转换为机器码,并执行这些代码。
- 内存管理:JVM负责管理Java程序的内存分配和回收,确保内存的有效利用。
- 跨平台执行:JVM使得Java程序能够“一次编写,到处运行”,即在不同的操作系统和硬件平台上运行。
🎉 JVM运行时环境
📝 类加载机制
类加载器负责从文件系统或网络中加载.class文件,创建Class对象并存储在内存中。在Java程序启动时,类加载器会加载所有使用的类。类加载器可以按需加载类,减少内存占用,但可能影响程序启动速度。
📝 垃圾回收机制
JVM自动回收不再使用的对象占用的内存。在Java程序中,当对象生命周期结束时,垃圾回收器会自动回收内存。垃圾回收简化了内存管理,减少了内存泄漏的风险,但可能会影响程序性能。
📝 内存模型
- 方法区:存储运行时常量池、类信息、字段信息等。存储Java类信息可以提高类加载效率,但占用内存较大。
- 堆:存储所有Java对象实例。存储对象实例方便对象共享,但内存占用较大。
- 虚拟机栈:存储局部变量表、操作数栈、方法出口等信息。存储局部变量和方法调用信息可以提高方法调用效率,但栈空间有限。
- 本地方法栈:存储本地方法(如C/C++方法)的调用信息。存储本地方法调用信息可以提高本地方法调用效率,但栈空间有限。
- 程序计数器:存储当前线程所执行的字节码指令的地址。存储线程执行状态可以提高线程切换效率,但空间有限。
🎉 JVM指令集
JVM指令集包括数据类型、运算指令、控制指令和引用指令。
📝 数据类型
| 数据类型 | 描述 |
|---|---|
| 整数类型 | byte, short, int, long |
| 浮点类型 | float, double |
| 布尔类型 | boolean |
| 引用类型 | 类、接口、数组 |
📝 运算指令
| 运算指令 | 描述 |
|---|---|
| 加法 | iadd, ladd, fadd, dadd |
| 减法 | isub, lsub, fsub, dsub |
| 乘法 | imul, lmul, fmul, dmul |
| 除法 | idiv, ldiv, fdiv, ddiv |
📝 控制指令
| 控制指令 | 描述 |
|---|---|
| 条件跳转 | ifeq, ifne, iflt, ifge, ifgt, ifle |
| 无条件跳转 | goto, goto_w |
| 循环 | tableswitch, lookupswitch |
📝 引用指令
| 引用指令 | 描述 |
|---|---|
| 创建对象 | new, anewarray, multianewarray |
| 访问对象 | getstatic, putstatic, getfield, putfield |
| 调用方法 | invokevirtual, invokeinterface, invokestatic, invokevirtual |
🎉 JVM性能优化
📝 性能监控工具
- JConsole:监控Java程序的内存使用情况、性能指标和线程状态。
- VisualVM:分析Java程序的内存使用情况、性能瓶颈和线程状态。
- JProfiler:分析Java程序的内存使用情况、性能瓶颈和线程状态。
📝 性能调优策略
- 编译优化:JIT编译将Java字节码编译成本地机器码执行。
- 内存优化:选择合适的内存分配策略和内存回收策略。
- 垃圾回收优化:选择合适的垃圾回收算法和垃圾回收器。
🎉 JVM类文件结构
📝 类文件格式
- 魔数:类文件标识符,用于识别文件类型。
- 版本号:类文件版本信息。
- 常量池:存储常量信息,如字符串、数字等。
- 访问标志:类、接口、字段、方法的访问权限。
- 类数据:类的名称、父类名称、接口名称等。
- 方法表:类、接口的方法信息。
- 属性表:类、接口、字段的属性信息。
🎉 JVM字节码执行
📝 解释执行
解释器逐条解释字节码并执行。
📝 编译执行
JIT编译器将字节码编译成本地机器码执行。
📝 Just-In-Time (JIT) 编译
JIT编译器在运行时将字节码编译成本地机器码执行。
🎉 JVM跨平台特性
📝 字节码
字节码是一种中间表示形式,可以在不同的平台上运行。
📝 虚拟机指令集
虚拟机指令集是一种抽象的指令集,可以在不同的平台上运行。
📝 系统调用接口
系统调用接口用于Java程序与操作系统交互。
🎉 JVM安全机制
📝 权限控制
JVM通过权限控制确保Java程序的安全性。
📝 类加载安全
JVM通过类加载机制确保Java程序的安全性。
📝 运行时安全检查
JVM在运行时对Java程序进行安全检查。
🎉 JVM调试
📝 断点设置
在Java程序中设置断点,以便在调试过程中暂停程序执行。
📝 调试命令
调试命令用于控制调试过程,如查看变量值、单步执行等。
📝 调试技巧
调试技巧用于提高调试效率,如设置条件断点、使用调试过滤器等。
🎉 JVM版本与特性
📝 JVM版本历史
从JVM 1.0到JVM 17.0,每个版本都引入了新的特性和改进。
📝 不同版本特性对比
每个版本都有其独特的新特性和改进,如Lambda表达式、Stream API、优化垃圾回收等。
📝 新特性介绍
新特性包括Lambda表达式、Stream API、优化垃圾回收、新的并发API、新的类库等。
🎉 JVM应用场景
JVM应用场景涵盖了Java应用、Android应用、大数据应用和云计算应用等多个领域。
🎉 JVM未来发展趋势
JVM未来发展趋势包括性能优化、并发优化、内存管理优化、安全性增强和跨平台性增强等多个方面。
🎉 技术描述扩充
📝 类加载机制
类加载机制是JVM的核心功能之一,它负责将.class文件加载到JVM中,并创建相应的Class对象。类加载过程包括以下几个步骤:
- 加载:查找并加载指定的
.class文件。 - 验证:验证
.class文件的字节码结构,确保其符合JVM规范。 - 准备:为类变量分配内存并设置默认初始值。
- 解析:解析类、接口、字段和方法的符号引用。
- 初始化:执行类构造器
<clinit>()方法,初始化类变量。
类加载器分为以下几种:
- 启动类加载器:负责加载
<JAVA_HOME>/lib目录中的.jar文件。 - 扩展类加载器:负责加载
<JAVA_HOME>/lib/ext目录中的.jar文件。 - 应用程序类加载器:负责加载用户类路径(
classpath)中的.jar文件。 - 自定义类加载器:用户自定义的类加载器。
📝 垃圾回收机制
垃圾回收(Garbage Collection,GC)是JVM自动回收不再使用的对象占用的内存的过程。垃圾回收器通过以下几种算法来识别和回收垃圾:
- 标记-清除(Mark-Sweep)算法:标记所有活动的对象,然后清除未被标记的对象。
- 标记-整理(Mark-Compact)算法:标记所有活动的对象,然后移动所有存活的对象到内存的一端,清除未被标记的对象。
- 复制算法:将内存分为两个相等的区域,每次只使用其中一个区域。当该区域满时,将存活的对象复制到另一个区域,并清空原区域。
- 分代收集算法:将对象分为新生代和老年代,针对不同代使用不同的垃圾回收算法。
📝 内存模型
JVM的内存模型包括以下几种区域:
- 方法区:存储运行时常量池、类信息、字段信息等。方法区是所有线程共享的内存区域。
- 堆:存储所有Java对象实例。堆是所有线程共享的内存区域,也是垃圾回收的主要区域。
- 虚拟机栈:每个线程都有自己的虚拟机栈,用于存储局部变量表、操作数栈、方法出口等信息。
- 本地方法栈:每个线程都有自己的本地方法栈,用于存储本地方法(如C/C++方法)的调用信息。
- 程序计数器:每个线程都有自己的程序计数器,用于存储当前线程所执行的字节码指令的地址。
📝 性能监控工具
- JConsole:JConsole是JDK自带的一个性能监控工具,可以监控Java程序的内存使用情况、性能指标和线程状态。使用JConsole可以查看JVM内存使用情况、线程状态、类加载情况、垃圾回收情况等。
- VisualVM:VisualVM是JDK自带的一个性能分析工具,可以分析Java程序的内存使用情况、性能瓶颈和线程状态。使用VisualVM可以查看JVM内存使用情况、线程状态、类加载情况、垃圾回收情况、堆转储文件等。
- JProfiler:JProfiler是Eclipse Foundation开发的一个性能分析工具,可以分析Java程序的内存使用情况、性能瓶颈和线程状态。使用JProfiler可以查看JVM内存使用情况、线程状态、类加载情况、垃圾回收情况、堆转储文件等。
📝 性能调优策略
- 编译优化:JIT编译器可以将Java字节码编译成本地机器码执行,从而提高程序性能。编译优化包括方法内联、循环展开、指令重排等。
- 内存优化:内存优化包括选择合适的内存分配策略和内存回收策略。内存分配策略包括堆分配、栈分配、本地分配等。内存回收策略包括标记-清除算法、标记-整理算法、复制算法、分代收集算法等。
- 垃圾回收优化:垃圾回收优化包括选择合适的垃圾回收算法和垃圾回收器。垃圾回收算法包括标记-清除算法、标记-整理算法、复制算法、分代收集算法等。垃圾回收器包括Serial GC、Parallel GC、Concurrent Mark Sweep GC(CMS GC)、Garbage-First GC(G1 GC)等。
📝 JVM类文件结构
- 魔数:魔数是类文件的标识符,用于识别文件类型。魔数是固定的,对于
.class文件,其魔数为0xCAFEBABE。 - 版本号:版本号表示类文件的版本信息。版本号分为主版本号和次版本号,主版本号表示JVM的版本,次版本号表示JVM的修订版本。
- 常量池:常量池存储常量信息,如字符串、数字等。常量池是类文件中最重要的部分之一,它包含了类文件中所有的常量。
- 访问标志:访问标志表示类、接口、字段和方法的访问权限。访问标志包括public、private、protected、static、final、synchronized、volatile等。
- 类数据:类数据包括类的名称、父类名称、接口名称等。类数据是类文件中最重要的部分之一,它包含了类的所有信息。
- 方法表:方法表包括类、接口的方法信息。方法表是类文件中最重要的部分之一,它包含了类的所有方法。
- 属性表:属性表包括类、接口、字段的属性信息。属性表是类文件中最重要的部分之一,它包含了类的所有属性。
📝 JVM字节码执行
- 解释执行:解释执行是JVM最初采用的执行方式,它逐条解释字节码并执行。解释执行效率较低,但启动速度快。
- 编译执行:编译执行是JVM在运行时将字节码编译成本地机器码执行。编译执行效率较高,但启动速度较慢。
- JIT编译:JIT编译是JVM在运行时将字节码编译成本地机器码执行的一种优化方式。JIT编译可以提高程序性能,但会增加启动时间。
📝 JVM跨平台特性
- 字节码:字节码是一种中间表示形式,它可以在不同的平台上运行。字节码是JVM跨平台特性的基础。
- 虚拟机指令集:虚拟机指令集是一种抽象的指令集,它可以在不同的平台上运行。虚拟机指令集是JVM跨平台特性的关键。
- 系统调用接口:系统调用接口用于Java程序与操作系统交互。系统调用接口是JVM跨平台特性的保障。
📝 JVM安全机制
- 权限控制:JVM通过权限控制确保Java程序的安全性。权限控制包括类权限、方法权限、字段权限等。
- 类加载安全:JVM通过类加载机制确保Java程序的安全性。类加载机制包括类加载器、类验证、类解析等。
- 运行时安全检查:JVM在运行时对Java程序进行安全检查。运行时安全检查包括类型检查、访问权限检查等。
📝 JVM调试
- 断点设置:在Java程序中设置断点,以便在调试过程中暂停程序执行。断点可以设置在方法调用、变量赋值、分支语句等位置。
- 调试命令:调试命令用于控制调试过程,如查看变量值、单步执行等。调试命令包括next、step into、step over、run、stop等。
- 调试技巧:调试技巧用于提高调试效率,如设置条件断点、使用调试过滤器等。调试技巧包括设置断点过滤器、设置断点条件、使用调试过滤器等。
📝 JVM版本与特性
- JVM版本历史:从JVM 1.0到JVM 17.0,每个版本都引入了新的特性和改进。JVM版本历史包括JVM 1.0、JVM 1.1、JVM 1.2、JVM 1.3、JVM 1.4、JVM 5.0、JVM 6.0、JVM 7.0、JVM 8.0、JVM 9.0、JVM 10.0、JVM 11.0、JVM 12.0、JVM 13.0、JVM 14.0、JVM 15.0、JVM 16.0、JVM 17.0等。
- 不同版本特性对比:每个版本都有其独特的新特性和改进,如Lambda表达式、Stream API、优化垃圾回收等。不同版本特性对比包括JVM 1.0与JVM 1.1、JVM 1.1与JVM 1.2、JVM 1.2与JVM 1.3、JVM 1.3与JVM 1.4、JVM 5.0与JVM 6.0、JVM 6.0与JVM 7.0、JVM 7.0与JVM 8.0、JVM 8.0与JVM 9.0、JVM 9.0与JVM 10.0、JVM 10.0与JVM 11.0、JVM 11.0与JVM 12.0、JVM 12.0与JVM 13.0、JVM 13.0与JVM 14.0、JVM 14.0与JVM 15.0、JVM 15.0与JVM 16.0、JVM 16.0与JVM 17.0等。
- 新特性介绍:新特性包括Lambda表达式、Stream API、优化垃圾回收、新的并发API、新的类库等。新特性介绍包括Lambda表达式、Stream API、优化垃圾回收、新的并发API、新的类库等。
📝 JVM应用场景
- Java应用:JVM是Java应用的基础,它为Java应用提供了跨平台执行的能力。
- Android应用:JVM是Android应用的基础,它为Android应用提供了跨平台执行的能力。
- 大数据应用:JVM是大数据应用的基础,它为大数据应用提供了高性能计算的能力。
- 云计算应用:JVM是云计算应用的基础,它为云计算应用提供了高性能计算的能力。
📝 JVM未来发展趋势
- 性能优化:JVM未来将更加注重性能优化,以提高程序执行效率。
- 并发优化:JVM未来将更加注重并发优化,以提高程序并发性能。
- 内存管理优化:JVM未来将更加注重内存管理优化,以提高内存使用效率。
- 安全性增强:JVM未来将更加注重安全性增强,以提高程序安全性。
- 跨平台性增强:JVM未来将更加注重跨平台性增强,以提高程序跨平台执行能力。

博主分享
📥博主的人生感悟和目标

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。
- 《Java项目实战—深入理解大型互联网企业通用技术》基础篇的购书链接:https://item.jd.com/14152451.html
- 《Java项目实战—深入理解大型互联网企业通用技术》基础篇繁体字的购书链接:http://product.dangdang.com/11821397208.html
- 《Java项目实战—深入理解大型互联网企业通用技术》进阶篇的购书链接:https://item.jd.com/14616418.html
- 《Java项目实战—深入理解大型互联网企业通用技术》架构篇待上架
- 《解密程序员的思维密码--沟通、演讲、思考的实践》购书链接:https://item.jd.com/15096040.html
面试备战资料
八股文备战
| 场景 | 描述 | 链接 |
|---|---|---|
| 时间充裕(25万字) | Java知识点大全(高频面试题) | Java知识点大全 |
| 时间紧急(15万字) | Java高级开发高频面试题 | Java高级开发高频面试题 |
理论知识专题(图文并茂,字数过万)
| 技术栈 | 链接 |
|---|---|
| RocketMQ | RocketMQ详解 |
| Kafka | Kafka详解 |
| RabbitMQ | RabbitMQ详解 |
| MongoDB | MongoDB详解 |
| ElasticSearch | ElasticSearch详解 |
| Zookeeper | Zookeeper详解 |
| Redis | Redis详解 |
| MySQL | MySQL详解 |
| JVM | JVM详解 |
集群部署(图文并茂,字数过万)
| 技术栈 | 部署架构 | 链接 |
|---|---|---|
| MySQL | 使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群 | Docker-Compose部署教程 |
| Redis | 三主三从集群(三种方式部署/18个节点的Redis Cluster模式) | 三种部署方式教程 |
| RocketMQ | DLedger高可用集群(9节点) | 部署指南 |
| Nacos+Nginx | 集群+负载均衡(9节点) | Docker部署方案 |
| Kubernetes | 容器编排安装 | 最全安装教程 |
开源项目分享
| 项目名称 | 链接地址 |
|---|---|
| 高并发红包雨项目 | https://gitee.com/java_wxid/red-packet-rain |
| 微服务技术集成demo项目 | https://gitee.com/java_wxid/java_wxid |
管理经验
【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718
希望各位读者朋友能够多多支持!
现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目:Java程序员廖志伟
- 🌥 哔哩哔哩:Java程序员廖志伟
- 🎏 个人社区:Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
650

被折叠的 条评论
为什么被折叠?



