主要学习了《深入理解Java虚拟机:JVM高级特性与最佳实践》的第三章
本文简直就是读书笔记,求作者不要撕我
程序计数器(PC)、虚拟机栈(java)、本地方法栈(native)
线程私有,内存分配和回收具备确定性
e.g.栈帧Stack Frame进入和退出有条不紊,类结构确定下来时就已知内存
Java堆、方法区(逻辑堆)
线程共享,内存多样,运行时才可知
分配和回收是动态的,垃圾回收器关注的是这部分内存
1.对象已死吗
(原文标题不错就不改了)
1)引用计数算法Reference Counting
顾名思义,ref即为生命(被引用+1,失效-1)
简单,高效,but难以解决对象间相互引用的问题「死锁Dead Lock」
2)可达性分析算法Reachability Analysis
「路由Routing」「图论」「树」
GC Root(根),引用链Reference Chain(茎)
通过父节点指针上查,根不可达则out
3)强软弱虚引用
如何描述一些“食之无味,弃之可惜”的对象
强:Object obj = new Object(),never被回收
软:内存溢出异常前触发救场