- Java垃圾回收机制
- 判断对象已死方法:
- 引用计数法(循环引用)
- 可达性分析
- GC Roots:
- 虚拟机栈中的引用对象
- 方法区中静态属性引用对象
- 方法区中常量引用对象
- 本地方法栈中JNI(Java native interface)引用的对象
- 引用分类:
- 垃圾回收算法:
- 标记-清除算法
- 标记-整理算法
- 复制算法
- 内存划分为两等份,新生代,Eden Survivor 8:1:1
- 分代收集算法
- 垃圾收集器:
- Serial&Serial Old
- 单线程,垃圾收集时暂停所有用户线程
- Serial针对新生代,复制算法
- Serial Old针对老年代,标记整理算法
- 简单高效,用户停顿
- ParNew
- Serial多线程版本,Serial和ParNew能和CMS(老年代)配合
- Parallel Scavenge
- 新生代多线程收集器,复制算法,吞吐量可控!(运行用户代码时间:CPU总消耗时间)
- Parallel Old
- Parallel Scavenge老年代版本,多线程,标记整理
- CMS
- G1
- 并行与并发,充分利用多CPU、多核环境,停顿时间可预测
- Minor GC & Full GC & Major GC:
- Minor GC:新生代垃圾回收,Eden区满就发生
- Major GC:清理老年代,常伴随一次Minor GC,比Minor GC慢10倍
- Full GC:清理老年代和新生代
- 对象分配规则:
- 优先分配在Eden区
- 大对象进入老年代
- 长期存活对象进入老年代
- 动态判断年龄
- Java内存模型
- 运行时数据区
- 程序计数器:用来指示执行哪条指令(地址)
- Java栈(虚拟机栈):每一个栈帧对应一个被调用的方法(Java方法)
- 局部变量表、操作数栈、指向运行时常量池的引用、方法返回地址
- 本地方法栈:执行本地方法服务
- 堆:程序员可以管理,用来存储对象本身以及数组
- 方法区(永久代):类信息、静态变量、敞亮、编译器编译后的代码
- 运行时常量池:每一个类或者接口的常量池运行时表现形式
posted @
2019-02-02 15:33
李怕怕
阅读(
189)
评论()
收藏
举报