垃圾回收

一、如何判断对象可以回收

1.1引用计数法(Python)

定义:当引用数为0时进行回收

问题:无法解决循环引用

1.2可达性分析算法(Java)

(堆空间分析器)

 

 

GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为引用链。

如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收。

GC Root对象有哪些 

虚拟机栈 -----栈帧中的本地变量表中引用的对象 ,如正在运行方法所使用的参数、局部变量、临时变量等

本地方法栈 -----即一般说的Native方法引用的对象

方法区----- 类静态属性引用的对象

方法区----- 常量引用的对象,如字符串常量池(StringTable)里的引用

以及Java虚拟机内部的引用,如基本数据类型对应的Class对象、常驻的异常对象(如:NullPointException、OutOfMermoryError)等,还有系统类加载器;

被同步锁(synchronized关键字)持有的对象;

反映虚拟机内部情况的JMXBean、HVMTI中注册的回调、本地代码缓存等。

1.3四种引用

强软弱虚,以及终结器引用(实线为强引用)

 

 

 

强引用(Strong Reference)是最常见的引用类型,它指向一个对象,只要这个引用存在,就不会被垃圾回收器回收。
软引用(Soft Reference)是一种较弱的引用类型,它指向一个对象,但当内存空间不足时,这个对象可能会被垃圾回收器回收。软引用可以用来实现缓存功能。
弱引用(Weak Reference)是一种更弱的引用类型,它指向一个对象,但只要这个对象没有被其他强或软引用指向,就会被垃圾回收器回收。弱引用可以用来解决循环依赖问题。
虚引用(Phantom Reference)是一种最弱的引用类型,它指向一个对象,但不能通过它访问到这个对象。虚引用只能配合ReferenceQueue使用,当这个对象被垃圾回收器回收时,虚引用会被放入ReferenceQueue中。虚引用可以在对象被销毁时做一些清理工作。

posted on 2022-11-25 18:19  HHHuskie  阅读(95)  评论(0编辑  收藏  举报

导航