1、JVM内存模型
线程私有区:
程序计数器:线程私有的,每个线程一份,内部保存的字节码的行号,用于记录当前正在执行的字节码指令地址
虚拟机栈:每个方法执行时都会创建一个栈桢来存储方法的变量表、操作数栈、返回值、返回地址等信息
本地方法栈:和虚拟机栈作用相似,但是它不是为Java方法服务,而是本地方法
线程共享区:
方法区:用于存放被虚拟机加载的元数据信息
堆:用于存放对象实例和数组,是垃圾回收的主要区域
2、对象分配规则
对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次MinorGC。大对象直接分配在老年代,长期存活的对象进入老年代
3、JVM加载class文件原理机制
JVM中类的加载是由类加载器和它的子类来实现的,类加载器负责在运行时查找和装入类文件中的类,把类的class文件中的数据加载到内存中。
4、类加载过程
类加载过程:
加载:查找并加载类的二进制数据在堆中创建类的对象
链接:
验证:格式检查
准备:为类的静态变量分配内存,并将其初始化为默认值
解析:将常量池中的符合引用替换成直接引用
初始化:为类的静态变量赋予正确的初始值
使用:new出对象在程序中使用
卸载:执行垃圾回收
5、类加载器
类加载器:启动类加载器、扩展类加载器、应用类加载器、自定义加载器
6、双亲委派机制
加载某个类时,先委托上一级的加载器加载,如果上级加载器还有上级,则继续向上委托。如果该类委托上级没有被加载,子类加载器才尝试加载该类。
双亲委派机制可以避免一个类被重复加载,保证唯一性。保证API的核心类库不会被修改。
7、垃圾回收算法
标记-清除
标记-整理
复制算法
分代算法
8、垃圾回收器
串行垃圾回收器:Sreal GC
并行垃圾回收器:ParNew GC
CMS垃圾回收器
G1垃圾回收器