-
自动内存管理机制
JAVA内存模型
垃圾收集器与内存分配策略
GC:垃圾收集
判断对象是否存活
- 引用计数算法
- 可达性分析算法
JAVA中,可作为GC Roots的对象:
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(Native方法)引用的对象
引用:
- 强引用
- 软引用
- 弱引用
- 虚引用
在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时的他们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经过两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。对象可以在finalize()方法中完成自救。但是,一个对象的finalize()方法只会被系统自动调用一次,如果面临下一次回收,finalize()方法不会被再次执行。
注意:finalize()能做的所有工作,使用try-finally或者其他方式都可以做的更好、更及时。方法区(永久代)的垃圾收集主要回收两部分内容:废弃常量和无用的类。判断无用的类的条件:
- 该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例
- 加载该类的ClassLoader已经被回收
- 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法
垃圾收集算法
- 标记-清除算法
- 复制算法
- 标记-整理算法
- 分代收集算法
垃圾收集器
- Serial 收集器
- ParNew 收集器
- Parallel Scavenge 收集器
- Serial Old 收集
- Parallel Old 收集器
- CMS 收集器
- G1 收集器
G1 内存模型
- 分区概念
- 分区
- 卡片
- 堆
- 分代模型
- 分代
- 本地分配缓冲
- 分区模型
- 巨型对象
- 已记忆集合
- Per Region Table
- 收集集合 (CSet)
- 年轻代收集集合
- 混合收集集合
-
虚拟机执行子系统
-
程序编译与代码优化
-
高效并发
JAVA虚拟机JVM高级特性
最新推荐文章于 2023-06-01 23:58:39 发布