中国信息港 [切换城市] 联系客服
您的位置:首页 >科技>详情

JVM笔记-垃圾回收算法和原理

来源:中国信息港 分类:科技 时间:2020-07-29 浏览量:

本文地址:http://www.kdyj.com/article/detail/1228.html

导语:     说垃圾回收是JVM毕生的追求毫不过分,为什么这么说呢?垃圾回收是一个难点,Java实现了自动垃圾回收,这一直是他引以为豪的事情。相比C程序猿需要手动释放内存回收垃,Java程序猿确实要幸福多了。他们可以把更多的时间拿来关注业务本身,而不是天天跟一堆内存撕逼!从开发效率层面来讲Java垃圾回收确实要比C优秀,但从回收效率方面来讲,Java还有很长的路要

        说垃圾回收是JVM毕生的追求毫不过分,为什么这么说呢?垃圾回收是一个难点,如果让程序猿自己去手动回收会面临很多问题,比如内存泄漏、重复回收等...Java实现了自动垃圾回收,这一直是他引以为豪的事情。相比C程序猿需要手动释放内存回收垃,Java程序猿确实要幸福多了。他们可以把更多的时间拿来关注业务本身,而不是天天跟一堆内存撕逼!从开发效率层面来讲Java垃圾回收确实要比C优秀,但从回收效率方面来讲,Java还有很长的路要走,毕竟自动回收是基于各种算法,按照一个模式去走流程,必然不会像C语言手动管理内存那么高效。尤其在早期的JVM版本中,采用的单线程回收机制,卡顿现象非常明显。所以你现在知道为啥大部分网友或者端游啥的都是C语言开发了吧,试想一下你正要放大招的时候突然卡住了,然后系统告诉你,嘿,兄弟等一下,我先回收下垃圾。然后你肯定一脸嫌弃骂骂咧咧:你这个糟糕的游戏!所以为啥我开头说垃圾回收是JVM毕生的追求,如果未来JVM大佬们能把垃圾回收处理的媲美C语言,那真不得了,咱们就可以用Java开发游戏咯

        从上面可以想象到JVM实现垃圾回收的过程是相当复杂的,要搞清楚这里面的实现细节首先我们可以根据三个点分析。

什么是垃圾?

        垃圾就是内存,具体来说是内存中没有引用指向的对象。就好比我们在公司天天忙的不亦乐乎,但是公司根本用不到我们,那我们就被认为是垃圾

怎么识别垃圾?

        知道什么是垃圾后,那我们怎么找出这些垃圾呢,有两种方法

引用计数法

可达性分析法 

怎么回收垃圾?

先聊聊内存模型,阐述分代意义

回收算法,针对不同代采用不用的算法,以求最高效率

  1. 复制算法

  2. 标记清除

  3. 标记整理

  4. 【问题】漏标怎么解决...

  5. 【问题】跨代引用怎么解决...

常用垃圾回收器


免责声明:本文章注明的文章来源于网络、自媒体综合提供的内容均源自网络、自媒体,版权归原作者所有,转载请联系原作者并获许可,文章观点仅代表作者本人,不代表本网站立场,如对本文内容有异议,请联系网站底部客服邮箱申请撤稿,我们会核实后处理。

扫码关注微信

扫码关注微信