简单理解垃圾回收

西敏寺钟声 2020/8/6 14:03:59

什么是垃圾回收?垃圾回收的是什么?如何判断为垃圾?垃圾是怎样被回收的?垃圾回收哪些区域的内存?什么是垃圾回收垃圾回收就是将被虚拟机视为垃圾的对象所占的内存释放掉。垃圾回收的是什么回收的是对象所占的内存如何判断为垃圾在垃圾收集器对堆内存进行回收前,会先判…
  • 什么是垃圾回收?
  • 垃圾回收的是什么?
  • 如何判断为垃圾?
  • 垃圾是怎样被回收的?
  • 垃圾回收哪些区域的内存?

什么是垃圾回收

垃圾回收就是将被虚拟机视为垃圾的对象所占的内存释放掉。

垃圾回收的是什么

回收的是对象所占的内存

如何判断为垃圾

在垃圾收集器对堆内存进行回收前,会先判断哪些对象还在“存活”,哪些对象已经“死去”,这些“死去”的对象,就是我们需要进行回收的垃圾。一般判定为垃圾有两种算法。

  1. 引用计数算法(已淘汰)

    引用计数算法,是指给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1,当引用失效时,计数器的值就减1。当计数器值为0时,该对象就会被回收。
    • 优点:简单直接,效率高。
    • 缺点:对于对象之间的相互引用无法解决,导致内存的泄露。
  2. 可达性分析算法

    通过一系列被称为“GC Roots”的对象作为起点,然后向下搜索,所走过的路径被称为引用链。当一个对象到 GC Roots之间没有任何引用链时,则说明该对象是不可用的,虚拟机就会将它们的内存释放掉。

GC Roots有哪些

  • 虚拟机栈中引用的对象。
  • 方法区中类静态属性引用的对象。
  • 方法区中常量引用的对象。
  • 本地方法栈中引用的对象。

垃圾是怎样被回收的

通过垃圾回收算法,JVM对垃圾进行标定然后回收其占用的内存空间。常见的垃圾回收算法有三种:
  1. 复制算法

    • 优点:简单高效,不会出现内存碎片问题
    • 缺点:内存利用率低,只有一半。如果存活对象很多的时候,效率低,因为需要复制很多对象。
  2. 标记清除

    • 优点:利用率百分之百
    • 缺点:标记和清除的效率不高,会产生内存碎片
  3. 标记整理

    • 优点:利用率百分之百,没有内存碎片
    • 缺点:效率很低,因为需要挪动内存
不同内存区域采用的回收算法不同,新生代使用复制算法。因为绝大多数对象不需要回收。老年代一般采用标记整理算法,CMS垃圾回收器采用标记清除算法。

垃圾回收哪些区域的内存

我们常谈的回收,绝大多数是回收堆内存。
随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[简单理解垃圾回收]http://www.zyiz.net/tech/detail-145675.html

上一篇:思否独立开发者丨大鹏:整整齐齐的排好,程序员中的灵魂画手做的好事

下一篇:从零搭建Spring Boot脚手架(3):集成mybatis

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程