1、第一门真正使用内存动态分配和垃圾收集技术的语言:Lisp
2、程序计数器、虚拟机栈、本地方法栈这3个区域随线程而生灭,这几个区域的内存会随着方法结束或线程结束而回收,GC关注的是Java堆和方法区
3、引用计数法很难解决对象之间相互循环引用的问题
4、在主流商用程序语言的主流实现中,都是通过可达性分析而不是引用计数来判定对象是否存活的。
可达性分析原理:通过一系列称为GC Roots的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,证明此对象是不可用的。
可以作为GC Roots的对象包括以下几种:
a、虚拟机栈(栈帧中的本地变量表)中引用的对象
b、方法区中类静态属性引用的对象
c、方法区中常亮引用的对象
d、本地方法栈中JNI(即一般说的Native方法)引用的对象
5、JDK1.2之后,将引用分为强引用、软引用、弱引用、虚引用4种
详见这篇文章
6、