JVM由四部分构成
1、Classloader :加载class文件
2、Native interface:负责调用本地接口,作用调用非JAVA语言的接口给JAVA用
3、Excution Engine :执行引擎 加载完class文件后,文件中的指令和数据会放在内存中,它负责把指令和数据解释给操作系统
4、Runtime Data Area:运行时数据区 分为六个部分:pc Register、stack、method Area、Heap、Native Method stack
pc Register:(寄存器) 保存JVM正在运行的指令的地址 生命周期随着线程
stack:(堆栈 受限的线性表 只能在栈顶插入和删除 入栈操作是 先把sp-2 在压入数据 出栈操作是先 弹出数据 再把 sp+2 ) 每一个线程的创建 都有一个栈的创建 用来保存栈帧
栈帧:每个方法的执行时创建 用于保存方法的局部变量数组、操作栈数(在编译时确定 固定不变)
Method Area:(方法区) (堆内存永生代) 在JVM启动时创建 用于保存静态变量、常量和方法信息
常量池
Heap:(堆 完全二叉树) 存放基本数据类型的实例 分为 新生代、老生代、永久代
新生代:Eden 80% survivor 10% survivor 10%
二 GC
1、一般采用分代收集算法 : Minor GC 速度快频率高 Full GC 速度慢 频率小