JVM思维导图(含面试问题整理)
2025-04-03 12:18:52 0 举报
AI智能生成
JVM思维导图(含面试问题整理)
作者其他创作
大纲/内容
JVM基础
定义与作用
Java虚拟机(JVM)是运行Java字节码的虚拟机进程
提供跨平台的代码执行环境
主要组成部分
类加载器(ClassLoader)
负责加载.class文件到内存中
分为引导类加载器、扩展类加载器和应用类加载器
运行时数据区(Runtime Data Areas)
方法区(Method Area)
存储已被虚拟机加载的类信息、常量、静态变量等数据
堆(Heap)
存放对象实例,是垃圾收集器管理的主要区域
虚拟机栈(VM Stack)
描述Java方法执行的内存模型,每个方法执行时会创建一个栈帧
本地方法栈(Native Method Stack)
为虚拟机使用到的本地(Native)方法服务
程序计数器(Program Counter Register)
当前线程所执行的字节码的行号指示器
执行引擎(Execution Engine)
负责执行字节码指令
包括即时编译器(JIT)和解释器
内存管理
垃圾收集(GC)
自动内存管理机制
识别和回收不再使用的对象
垃圾收集算法
标记-清除算法
标记出所有需要回收的对象,然后统一回收
复制算法
将内存分为两块,一块使用,一块空闲,当一块用完时,将存活对象复制到另一块
标记-整理算法
标记存活对象,然后向一端移动存活对象,清理掉端边界以外的内存
分代收集算法
结合多种算法,根据对象存活周期的不同将内存划分为几块
垃圾收集器
Serial收集器
单线程收集器,适用于新生代
Parallel Scavenge收集器
多线程收集器,注重吞吐量
CMS收集器
以获取最短回收停顿时间为目标的收集器
G1收集器
面向服务端应用的垃圾收集器,将堆内存划分为多个区域
内存分配与回收策略
对象优先在Eden分配
大对象直接进入老年代
长期存活的对象进入老年代
动态对象年龄判定
空间分配担保
类加载机制
加载过程
加载
通过类的全限定名来获取定义此类的二进制字节流
链接
验证
确保被加载类的正确性
准备
为类的静态变量分配内存,并设置初始值
解析
把类中的符号引用转换为直接引用
初始化
执行类构造器<clinit>()方法的过程
双亲委派模型
定义
类加载器有层次结构,优先由父类加载器尝试加载类
工作过程
当一个类加载器收到类加载请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成
好处
保证Java程序安全稳定运行
性能调优
监控工具
jps
显示当前系统中所有HotSpot虚拟机进程
jstat
提供对JVM中堆的统计信息
jmap
生成堆转储快照
jstack
显示虚拟机的线程快照
调优策略
调整堆大小
通过-Xms和-Xmx参数调整堆的初始大小和最大大小
选择合适的垃圾收集器
根据应用需求选择合适的垃圾收集器组合
调整内存分配策略
通过-XX:+UseTLAB参数开启线程本地分配缓冲区
面试问题整理
JVM内存模型相关
JVM内存是如何划分的?
堆和栈有什么区别?
如何判断一个对象是否可以被回收?
类加载机制相关
类加载的过程是怎样的?
什么是双亲委派模型?
双亲委派模型有什么好处?
垃圾收集相关
常见的垃圾收集算法有哪些?
CMS垃圾收集器的工作原理是什么?
如何选择合适的垃圾收集器?
性能调优相关
如何监控JVM的性能?
在什么情况下需要调整JVM的内存大小?
调优JVM时应该注意哪些问题?
0 条评论
下一页