JVM内存模型、GC垃圾回收
一、堆
Java虚拟机管理的内存中最大的一块,目的是存放对象实例
堆是垃圾收集器管理的主要区域,也被称为GC堆。Java垃圾回收机制:分代垃圾回收算法;因此Java堆还可以细分为新生代、老年代。
二、方法区
存储已被虚拟机加载的类信息、常量、静态变量等数据
三、程序计数器
代码编译后会生成一条条指令,程序计数器记录指令执行到哪一行了
四、JVM栈
生命周期与线程相同,用于存放局部变量等
每个方法被执行的时候都会创建一个栈帧,每个方法执行过程中,就是栈帧进栈到出栈的过程
五、本地方法栈
为虚拟机用的Native方法服务
垃圾回收
一、如何判断垃圾
1、引用计数算法
在对象中添加一个引用计数器,计数为0时不再使用
2、根搜索算法
从GC Roots开始向下搜索,当一个对象到GC Roots没有任何引用链相连时,认为不可用
二、垃圾回收机制
1、标记清除算法
标记所有需要被回收的对象,统一清除
2、标记复制算法
将留下的对象复制到另一块内存区域,统一清除原内存区域
3、标记整理算法
将保留的对象移动到内存的一侧,边界外的对象清除
Java采用的来及回收机制:分代收集算法
分为新生代和老年代,新生代采用标记复制算法,老年代采用标记整理算法