📕我是廖志伟,一名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的主要职责是执行Java程序,它负责加载、验证、执行Java字节码,并管理内存和垃圾回收。通过这种方式,JVM确保了Java程序的跨平台性和安全性。
🍊 JVM架构
JVM的架构由以下几个关键部分组成:
- 类加载器:负责将Java类文件加载到JVM中,并创建相应的Java类对象。
- 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。
- 方法区:存储类信息、常量、静态变量等数据。
- 堆:存储所有Java对象实例和数组。
- 虚拟机栈:每个线程私有的,用于存储局部变量和方法调用栈。
- 本地方法栈:用于存储本地方法调用的栈。
- 程序计数器:用于存储线程当前执行的字节码指令的地址。
- 执行引擎:负责执行字节码指令,包括解释器和JIT编译器。
🍊 JVM内存模型
🎉 类加载机制
类加载机制负责将Java类文件加载到JVM中,并创建相应的Java类对象。这个过程包括加载、验证、准备、解析和初始化五个步骤。
🎉 运行时数据区
运行时数据区包括以下部分:
- 方法区:存储类信息、常量、静态变量等数据。
- 堆:存储所有Java对象实例和数组。
- 虚拟机栈:每个线程私有的,用于存储局部变量和方法调用栈。
- 本地方法栈:用于存储本地方法调用的栈。
- 程序计数器:用于存储线程当前执行的字节码指令的地址。
🍊 JVM垃圾回收
🎉 垃圾回收算法
垃圾回收算法包括以下几种:
- 标记-清除算法:通过标记所有可达对象,然后清除未被标记的对象。
- 标记-整理算法:在标记-清除算法的基础上,增加了整理步骤,将存活对象移动到堆的一端,以减少内存碎片。
- 复制算法:将堆分为两个相等的区域,每次只使用其中一个区域,当该区域满时,将存活对象复制到另一个区域。
- 标记-整理-复制算法:结合了标记-清除算法和复制算法的优点,将堆分为三个区域,每次只使用一个区域。
- 分代回收算法:将对象分为新生代和老年代,针对不同代采用不同的回收策略。
🎉 垃圾回收器
垃圾回收器包括以下几种:
- Serial GC:一种单线程的垃圾回收器,适用于单核CPU。
- Parallel GC:一种多线程的垃圾回收器,适用于多核CPU。
- CMS GC:一种以低延迟为目标的垃圾回收器,适用于对响应时间要求较高的场景。
- G1 GC:一种面向服务端应用的垃圾回收器,适用于大内存场景。
- ZGC:一种低延迟的垃圾回收器,适用于对响应时间要求极高的场景。
- Shenandoah GC:一种低延迟的垃圾回收器,适用于对响应时间要求极高的场景。
🍊 JVM性能调优
🎉 JVM参数配置
JVM参数配置可以通过命令行或配置文件进行设置,以优化JVM的性能。例如,可以通过设置堆大小、线程数量等参数来优化JVM的性能。
🎉 JVM监控工具
JVM监控工具包括以下几种:
- JConsole:一个图形化的JVM监控工具,可以实时监控JVM的性能。
- VisualVM:一个集成了多种JVM监控工具的图形化界面。
- JProfiler:一个功能强大的JVM性能分析工具。
🎉 性能调优策略
性能调优策略包括以下几种:
- CPU调优:包括优化代码、减少线程竞争、使用多线程等技术。
- 内存调优:包括优化对象创建、减少内存泄漏、使用缓存等技术。
- 线程调优:包括优化线程创建、减少线程竞争、使用线程池等技术。
🍊 JVM类加载机制
🎉 类加载过程
类加载过程包括以下步骤:
- 加载:加载类信息,创建类对象。
- 验证:验证类信息,确保类信息符合Java规范。
- 准备:为类变量分配内存,并设置默认值。
- 解析:解析类、接口、字段和方法的符号引用。
- 初始化:执行类构造器,初始化类变量。
🎉 类加载器
类加载器包括以下几种:
- Bootstrap ClassLoader:JVM自带的类加载器,负责加载核心类库。
- Extension ClassLoader:负责加载扩展类库。
- App ClassLoader:负责加载应用程序类库。
- System ClassLoader:负责加载系统类库。
🍊 JVM字节码执行
🎉 字节码指令集
字节码指令集包括加载、存储、运算、控制等指令。
🎉 执行引擎
执行引擎包括以下两种:
- 解释器:逐条解释执行字节码指令。
- Just-In-Time (JIT) 编译器:将字节码编译成本地机器码,以提高执行效率。
🍊 JVM与JIT编译器
🎉 JIT编译器原理
JIT编译器通过分析字节码,优化代码,并将优化后的代码编译成本地机器码。
🎉 JIT编译器优化
JIT编译器优化包括以下几种:
- 线程局部存储:将局部变量存储在寄存器中,以提高访问速度。
- 栈映射:将栈上的变量映射到寄存器中,以提高访问速度。
- 灵活数组:允许数组元素在运行时动态扩展,以提高内存利用率。
- 循环优化:包括循环展开、循环不变式提取等技术,以提高循环执行效率。
🍊 JVM与垃圾回收器对比
🎉 Serial GC vs Parallel GC
- Serial GC:适用于单核CPU。
- Parallel GC:适用于多核CPU。
🎉 CMS GC vs G1 GC
- CMS GC:适用于对响应时间要求较高的场景。
- G1 GC:适用于大内存场景。
🎉 ZGC vs Shenandoah GC
- ZGC:适用于对响应时间要求极高的场景。
- Shenandoah GC:适用于对响应时间要求极高的场景。
🍊 JVM与类加载器对比
🎉 Bootstrap ClassLoader vs Extension ClassLoader
- Bootstrap ClassLoader:负责加载核心类库。
- Extension ClassLoader:负责加载扩展类库。
🎉 App ClassLoader vs System ClassLoader
- App ClassLoader:负责加载应用程序类库。
- System ClassLoader:负责加载系统类库。
🍊 JVM与性能调优工具对比
🎉 JConsole vs VisualVM
- JConsole:一个图形化的JVM监控工具。
- VisualVM:一个集成了多种JVM监控工具的图形化界面。
🎉 JProfiler vs YourKit
- JProfiler:一个功能强大的JVM性能分析工具。
- YourKit:一个功能强大的JVM性能分析工具。
🍊 JVM与JIT编译器对比
🎉 解释器 vs JIT编译器
- 解释器:逐条解释执行字节码指令。
- JIT编译器:将字节码编译成本地机器码,以提高执行效率。
🍊 JVM与垃圾回收算法对比
🎉 标记-清除算法 vs 标记-整理算法
- 标记-清除算法:简单,但会产生内存碎片。
- 标记-整理算法:可以减少内存碎片。
🎉 标记-整理-复制算法 vs 分代回收算法
- 标记-整理-复制算法:适用于小内存场景。
- 分代回收算法:适用于大内存场景。
🍊 JVM类加载机制详细描述
🎉 类加载过程
类加载过程是JVM中一个至关重要的步骤,它确保了Java程序能够正确地加载和初始化所需的类。这个过程包括以下五个步骤:
- 加载:JVM通过类加载器将类文件加载到内存中,并创建一个Class对象。
- 验证:JVM对加载的类文件进行验证,确保其符合Java虚拟机规范。
- 准备:为类变量分配内存,并设置默认值。
- 解析:将符号引用转换为直接引用。
- 初始化:执行类构造器,初始化类变量。
🎉 类加载器
JVM中的类加载器负责将类文件加载到JVM中。以下是几种常见的类加载器:
- Bootstrap ClassLoader:负责加载核心类库,如rt.jar中的类。
- Extension ClassLoader:负责加载扩展类库,通常位于JVM的扩展目录中。
- App ClassLoader:负责加载应用程序类库,通常位于应用程序的JAR文件中。
- System ClassLoader:负责加载系统类库,通常与App ClassLoader相同。
| 类加载器 | 负责加载的类库 | 位置 |
|---|---|---|
| Bootstrap ClassLoader | 核心类库 | rt.jar |
| Extension ClassLoader | 扩展类库 | JVM的扩展目录 |
| App ClassLoader | 应用程序类库 | 应用程序的JAR文件 |
| System ClassLoader | 系统类库 | 与App ClassLoader相同 |
通过上述表格,我们可以清晰地看到每种类加载器负责加载的类库及其位置。这有助于我们更好地理解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
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
86万+

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



