JVM面试整理
2024-09-24 09:49:15 2 举报
主要包括如下知识点: 1、类加载机制、双亲委派 2、运行时数据区 3、JVM内存模型 4、垃圾回收 5、JVM参数及常用命令 持续更新中.......
作者其他创作
大纲/内容
本地方法栈
方法区
Custom ClassLoader
对类的静态变量、静态代码块执行初始化操作
2.1、装载(load)
验证
jvm虚拟机栈
保证被加载类的正确性1、文件格式验证2、元数据验证3、字节码验证4、符号引用验证
S0
2.2、链接(link)
堆heap
堆
JVM
1、通过一个类的全限定名称获取此类的二进制字节流2、将这个字节流代表的静态存储结构转化为方法区的运行时数据结构3、在java堆中,生成一个代表这个类的java.lang.Class对象,作为方法区中这些数据的访问入口
5、垃圾回收
类加载机制
解析
加载java平台扩展功能的一些jar包,包括$JAVA_HOME/jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
6、jvm参数
运行时数据区
2、.class文件到虚拟机(类加载流程)
自定义ClassLoader
S1
加载$JAVA_HOME中 jre/lib/rt.jar里所有的classC++
1、为类的静态变量分配内存2、将其初始化为默认值
Extension ClassLoader
类创建过程
程序计数器
5.1、垃圾收集算法
类加载器:1)Bootstrap2)Extension3) App4) Custom
类信息常量静态变量编译后的代码
常见问题1、为什么需要Survivor区,只有Eden区不行吗?答:减少被送到老年代的对象,进而减少Full GC的发生2、为什么需要两个Survivor区?答:解决Survivor区内存碎片化
2.3、初始化(initialize)
APP ClassLoader
将类中的符号引用转换为直接引用
非堆方法区
准备
5.2、垃圾收集器
加载classpath中指定的jar包-Djava.class.path指定目录下的jar包
标记-清除标记-复制标记-整理
SerialSerial OldParallel ScavengeParaller OldCMSG1
Survivor区
Young区
Bootstrap ClassLoader
4、jvm内存模型
3、运行时数据区
加载原则:双亲委派先检查:自底向上后加载:自顶向下
Eden区
old区
1、源码到类文件(.class)
收藏
0 条评论
回复 删除
下一页