> 文章列表 > hjr-JAVA 完整的说一下垃圾回收

hjr-JAVA 完整的说一下垃圾回收

hjr-JAVA 完整的说一下垃圾回收

内存模型

Java的内存模型有两种
1、JVM分为堆内存和桟内存,堆中存放程序员创建的对象,桟存放执行的方法信息,局部变量和参数等
堆内存所有线程共享,桟每个线程维护各自的内存空间互不影响
所以Java的内存模型是线程安全的

2、多线程共享变量,在主内存里存储的同时,每个线程维护各自的虚拟内存保存该变量副本,优先操作虚拟内存的变量副本,再异步更新主内存,才是JVM内存模型把

垃圾回收

判断算法

引用计数法和可达性分析算法判断,当对象不再被Java程序所引用时,
等待被回收

引用计数方法 + 可达性分析算法是用来判断对象是否处于非活跃状态

引用计数方法:当对象被引用+1,释放引用-1,为0标记为非活跃
可达性分析算法:解决引用计数循环引用问题,即便对象a和b相互引用,只要从GC Roots出发无法到达a或者b,那么可达性分析便不会将它们加入存活对象合集之中。

回收算法

复制,标记清除,标记整理,是用来具体做回收的算法

复制;AB相等的内存,A用来使用,B用来把A的所有活跃对象转移并存储,然后清空A

标记清除:它通过标记所有可达对象,然后清除所有未标记对象的方式进行回收

标记整理:它通过标记所有可达对象,然后让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

回收时机

当JVM判断堆内存空间不足的时候,会使用垃圾回收器,使用判断算法判断哪些对象可以被回收,再使用垃圾回收算法进行具体的回收操作

回收流程

初始标记->并发标记->回收/整理回收