引用计数法
- 垃圾回收机制
Java语⾔中⼀个显著的特点就是引⼊了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃⽽解。由于有个垃圾回收机制,Java中的对象不再有“作⽤域”的概念,只有对象的引⽤才有“作⽤域”。
垃圾回收可以有效的防⽌内存泄露,有效的使⽤空闲的内存
- 引用计数器
堆中每个对象实例都有⼀个引⽤计数。当⼀个对象被创建时,且将该对象实例分配给⼀个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引⽤时,计数加1(a = b,则b引⽤的对象实例的计数器+1),
但当⼀个对象实例的某个引⽤超过了⽣命周期或者被设置为⼀个新值时,对象实例的引⽤计数器减1。任何引⽤计数器为0的对象实例可以被当作垃圾收集。当⼀个对象实例被垃圾收集时,它引⽤的任何对象实例的引⽤计数器减1
-
图解,当栈引用堆中的对象时,则加1,否则减1
-
优缺点
引⽤计数收集器可以很快的执⾏,交织在程序运⾏中。对程序需要不被⻓时间打断的实时环境⽐较有利。
⽆法检测出循环引⽤。如⽗对象有⼀个对⼦对象的引⽤,⼦对象反过来引⽤⽗对象。这样,他们的引⽤计数永远不可能为0
-
编写测试类
-
控制台打印垃圾回收 -verbose:gc -XX:+PrintGCDetails