垃圾回收机制是java语言的特性之一,java 是C++语言之后 诞生的语言,垃圾回收机制就相当于解决了C++语言对程序员的一些痛点,在语言中,当没有对象引用指向原先分配的对象内存时,该内存区域便定义为垃圾内存,JVM(java的虚拟机)的一个系统级线程会自动释放该内存。此操作称之为垃圾回收
1.如何判断哪些内存地址是垃圾
目前判断对象回收的有两种算法
a.引用计数法
引用计数法通过判断该对象被引用的次数 ,如果该对象被其他对象引用 引用计数+1, 如果停止引用关系,计数次数-1,当引用关系为0时,回收该对象.
但是如果俩个对象互相强引用的情况下,俩个互相引用计数都不为0,会导致俩个对象都无法被回收,所以 需要用到可达性算法.
b.可达性分析法
可达性分析算法 ,首先确定一系列根对象(GC roots), 以根对象为起点,以所有引用对象关系搜索出一条引用链,在已用链上的对象就判断为不可回收,反之,不在引用链关系上的对象 就认定可以被回收。
根对象的类型:
1.虚拟机栈中的引用对象
2.方法去中类静态的引用对象
3,方法去中常量引用对象
4,native方法的对象
5,虚拟机中的内部对象
网友评论