欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 垃圾回收学习

垃圾回收学习

2025/4/1 3:26:07 来源:https://blog.csdn.net/2301_78630849/article/details/146423935  浏览:    关键词:垃圾回收学习

本次学习的主要内容如下:

  1. 如何判断对象可以回收
  2. 垃圾回收算法
  3. 分代垃圾回收
  4. 垃圾回收器
  5. 垃圾回收调优

JVM采用的可达性分析算法

  • Java虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象
  • 扫描堆中的对象,看是否能够沿着GC Root对象为起点的引用链找到该对象,找不到,表示可以回收

四种引用

1、强引用

      当没有任何对象跟其有引用时,就会被垃圾回收机制回收

2、软引用

      无强引用引用时,发生垃圾回收后,且发现内存仍然不足,就会被垃圾回收机制回收

3、弱引用

      无强引用引用时,发生垃圾回收,不管内存是否充足,都会被回收掉

4、虚引用

      必须配合引用队列使用,虚拟引用引用的对象被垃圾回收时,虚引用自己就会放入引用队列,而间接的用线程调用虚拟引用对象的方法,调用Unsafe.greeMemory去释放直接内存

5、终结器引用

      必须配合引用队列使用,当其对象被回收时,会将终结器引用加入引用队列,此时其对象还未被垃圾回收,再由FinallizeHandler线程去查看引用队列是否有终结器引用,若有,则会找到对应的对象并且调用其finallize()方法,使其下次垃圾回收时会被回收

垃圾回收算法

标记清楚:第一个阶段先标记哪些可能是垃圾,第二个阶段就是把垃圾占用的空间释放;其优点就是速度快,但是容易导致空间不连续,导致产生内存碎片

标记整理:清理的过程中将可用的对象向前移动,使内存更为紧凑。就不会再产生内存碎片了,但是效率较低

复制:有两个区域FROM和TO,将不被引用的对象标记为垃圾,然后清除,将存活的对象复制到TO区,不会产生碎片但是会占用双倍内存空间

分代回收

主要分为两个大区域:新生代和老年代;经常要使用的对象放在老年代中,而用完就可以删掉的对象放在新生代中

minor gc会引发 stop the world,暂停其他用户的线程,等垃圾回收结束,用户线程才恢复运行;当老年代空间不足,会先尝试触发minor gc,如果之后空间仍不足,那么触发full gc,STW时间更长

 垃圾回收器

1、串行垃圾回收器

      ·单线程

      ·堆内存较小,适合个人电脑

2、吞吐量优先的垃圾回收器

      ·多线程

      ·堆内存较大,多核cpu

      ·让单位时间内,STW的时间最短

3、响应时间优先的垃圾回收器

      ·多线程

      ·堆内存较大,多核cpu

      ·尽可能让单次STW的时间最短

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com