JVM知识整理
2025-04-03 12:18:26 0 举报
AI智能生成
文件类型:Markdown 修饰语:概要总结 # JVM核心内容概览 Java虚拟机(JVM)作为运行Java程序的平台,负责将字节码转换为机器代码执行。其核心组成包括类加载器、运行时数据区、执行引擎和本地接口。 - 类加载器:将.class文件加载到JVM中。 - 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈、程序计数器。 - 方法区存储已加载的类信息、常量、静态变量。 - 堆是存放对象实例的区域。 - 虚拟机栈负责方法的调用执行。 - 本地方法栈处理本地方法调用。 - 程序计数器跟踪当前线程执行的位置。 - 执行引擎:负责解释字节码,将其转换成对应平台的机器码执行。 - 本地接口:提供访问本地库的方法。 JVM的内存管理机制包括自动垃圾收集和内存分配策略,确保应用资源的有效管理和利用。 在性能调优方面,了解JVM内存模型和垃圾回收机制对于提高应用程序的稳定性和性能至关重要。同时,选择合适的垃圾回收器(如G1、CMS等)可以根据应用特性优化资源使用和回收效率。 JVM的知识体系是深入理解和掌握Java技术不可或缺的一部分,其对程序性能和资源管理的影响贯穿整个软件开发生命周期。
作者其他创作
大纲/内容
JVM定义
Java虚拟机
运行Java字节码的虚拟机
屏蔽不同操作系统间的差异
跨平台特性
一次编写,到处运行
JVM架构
类加载器子系统
加载.class文件
通过文件系统或网络读取类文件
将类文件转换为二进制数据
链接
验证字节码文件的正确性
准备内存空间
解析符号引用
初始化
执行静态代码块
初始化静态变量
运行时数据区
方法区
存储已被虚拟机加载的类信息、常量、静态变量等
线程共享区域
堆
存放对象实例
垃圾回收的主要区域
线程共享区域
虚拟机栈
方法执行的内存模型
每个方法执行时创建栈帧
线程私有区域
本地方法栈
为虚拟机使用到的本地方法服务
线程私有区域
程序计数器
当前线程所执行的字节码的行号指示器
线程私有区域
执行引擎
解释器
解释字节码为机器码
即时编译器
将热点代码编译为本地机器码
垃圾回收器
管理堆内存的生命周期
回收不再使用的对象
JVM内存管理
内存分配与回收
自动内存管理机制
垃圾收集器自动回收不再使用的对象
内存泄漏
未被释放的内存资源
垃圾收集算法
标记-清除算法
标记出所有需要回收的对象
统一回收
复制算法
将内存分为两块
一块使用,一块空闲
标记-整理算法
标记后整理存活对象
移动对象位置
分代收集算法
根据对象存活周期的不同将内存划分为几块
不同代采用不同的收集算法
垃圾收集器
Serial收集器
单线程收集器
适用于客户端
Parallel Scavenge收集器
吞吐量优先的收集器
适用于后台运算
CMS收集器
以获取最短回收停顿时间为目标
适用于服务端
G1收集器
面向服务端应用的垃圾收集器
将堆内存划分为多个区域
JVM性能监控与故障处理工具
JDK命令行工具
jps
显示当前系统中所有JVM进程
jstat
监视虚拟机各种运行状态信息
jmap
生成堆转储快照
jhat
分析堆转储文件
jstack
打印线程的堆栈信息
JVisualVM
图形化界面工具
监控和故障处理
JConsole
基于JMX的可视化监视工具
监控内存、线程等信息
JVM类加载机制
加载
通过类加载器读取.class文件
生成对应的Class对象
链接
验证
确保加载的类信息符合JVM规范
准备
为类变量分配内存并设置类变量初始值
解析
将类、接口、字段和方法的符号引用转换为直接引用
初始化
执行类构造器<clinit>()方法的过程
初始化类变量和静态代码块
类加载器类型
引导类加载器(Bootstrap ClassLoader)
加载Java核心库
扩展类加载器(Extension ClassLoader)
加载扩展目录下的jar包
系统类加载器(System ClassLoader)
加载应用类路径下的jar包和类
用户自定义类加载器
实现自定义的加载逻辑
JVM调优
调优目标
减少GC停顿时间
提高吞吐量
减少内存占用
调优策略
调整堆大小
设置-Xms和-Xmx参数
选择合适的垃圾收集器
根据应用需求选择
调整内存分配策略
调整新生代和老年代的比例
监控和分析
使用JVM监控工具进行实时监控
分析GC日志进行调优
调优案例
高并发系统调优
优化线程堆栈大小
使用G1垃圾收集器
内存泄漏问题处理
定位内存泄漏源头
优化代码逻辑
JVM规范与实现
JVM规范
定义了JVM的结构、类文件格式、执行引擎等
确保不同厂商的JVM实现兼容
JVM实现
Oracle JDK
官方JVM实现
OpenJDK
开源的JVM实现
其他厂商JVM
如IBM J9、Azul Zing等
JVM版本更新
新特性
Lambda表达式、模块化等
性能改进
垃圾收集器优化、JIT编译器改进等
安全更新
修复安全漏洞
JVM与操作系统交互
线程模型
JVM线程与操作系统线程的映射
绿色线程模型
JVM管理线程,操作系统调度线程
本地方法接口
JNI
Java Native Interface
允许Java代码和其他语言编写的代码交互
系统属性和环境变量
获取操作系统信息
配置JVM运行环境
资源限制
设置JVM可用的系统资源限制
如内存、CPU等
0 条评论
下一页