(1)什么是垃圾?为什么要使用垃圾回收器?

没有对象的引用指向原先分配给某个对象的内存,那么这块内存就是垃圾。

使用垃圾回收器有两个优点:一是可以使程序开发人员从释放内存这个重担中解救出来,提高了开发效率,因为,在一种没有垃圾回收器的语言中,需要花很多时间在释放内存上;二是能够保持程序的完整性,垃圾回收也是JAVA安全策略的一部分,不会因为程序员错误的释放内存而导致JAVA虚拟机的崩溃。

当然,垃圾回收器也有缺点,那就是增大了程序的开销,因为需要跟踪每个对象的引用。

垃圾回收算法需要做的事情:一是发现垃圾,二是回收垃圾。


(2)常用算法:引用计数法,跟踪法,压缩收集器,拷贝收集器

引用计数法,堆中的每个对象对应一个计数器,当有新的引用指向它时,计数器加一,当有引用超出作用域时,计数器减一,当计数器为零时,具备回收条件。缺点:增大了开销,对象的赋值操作都会引起计数器的操作,而且不能处循环的情况,如父对象有一个对子对象的引用,而子对象又有一个对父对象的引用,这种情况引用计数永远都不会为0。

跟踪收集器方法,跟踪从根结点开始的对象引用图,在跟踪过程中,能够遍历到的标记出来,如果遍历整个图,不能到达的对象就是垃圾对象。

压缩收集器,标记并清除收集器通常使用的两种策略是压缩和拷贝。这两种方法都是快速地移动对象减少堆碎块。压缩收集器把活动的对象越过空闲区滑动到堆的一端,在这个过程中,堆的另一端出现一个大的连续空闲区。所有被移动的对象的引用也被更新,指向新的位置。

拷贝收集器,把所有的活动对象移动到一个新的区域。在拷贝的过程中,它们被紧挨着布置,所以,可以消除原本它们在旧区域的空隙。原有的区域被认为都是空闲区。这种方法的好处是对象可以在从根对象开始的遍历过程中随着发现而被拷贝,不再有标记和清除的区分。
一般的拷贝收集器算法被称为“停止并拷贝”。在这个方案中,堆被分为两个区域,任何时候都只使用其中的一个区域。对象在同一个区域中分配,直到这个区域被耗尽。此时,程序执行中止,堆被遍历,遍历时遇到活动对象就拷贝到另外一个区域。当停止和拷贝过程结束时,程序恢复执行。内存将从新的区域中分配,直到它也被用尽。缺点是,每次垃圾收集的时候,都需要把所有的活动对象拷贝一次。

按代收集的回收器,停止并拷贝的缺点是每次收集都需要把所有的活动对象都拷贝一次,按代收集可以缓解这个缺点,因为“大多数程序创建的大部分对象都具有很短的生命期,比如局部变量”,“大多数程序都创建一些具有非常长生命周期的对象,如全局变量”。
按代收集的收集器通过把对象按照寿命来分组解决这个“停止拷贝”效率低下的问题。在按代收集的方法中,堆被分成两个或者更多的子堆,每一个子堆为一“代”对象服务,最年幼的那一代进行最频繁的垃圾收集。因为大多数对象都是短促出现的,只有很小部分的年幼对象可以在它们经历第一次收集后还存活。如果一个年幼的对象经历了好几次垃圾收集后仍然存活,那么这个对象就成长为寿命更高的一代。

自适应收集器,没有固定的收集方法,根据实际情况选择合适的收集方法。


JAVA - 垃圾回收相关推荐

  1. 假期三天,我肝了万字的Java垃圾回收,看完你还敢说不会?

    大家好,我是狂聊,上一篇已经把 Jvm 的运行区数据和类加载机制聊完了. 今天来说说 Java 垃圾回收,高频面试问题. 提纲附上,话不多说,直接干货 1.什么是垃圾回收? 垃圾回收(Garbage ...

  2. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

  3. 细述 Java垃圾回收机制→Types of Java Garbage Collectors

    本文将会介绍各种不同类型的Java垃圾回收器.垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程. Java有四种类型的垃圾回收器, Serial Garbage Collect ...

  4. 细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis

    本文非原创,翻译自Java Garbage Collection Monitoring and Analysis 在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的.和C语言不一样的 ...

  5. Java垃圾回收工作原理

    在C++中,在heap上分配对象比在stack上分配对象更加昂贵.程序需要找到合适的内存块,再返回内存的地址.但是在Java中垃圾回收器显著地提高了在heap上分配对象的速度.听起来会有些怪,但是这就 ...

  6. Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)

    背景: 之前面试阿里支付宝,被问到常见的GC Root 是什么? 当时自己支支吾吾,明明自己看过深入理解Java 虚拟机这本书,但是就是回答不上来. 后来自己工作中,遇到内存泄漏问题.我百度,下载了M ...

  7. Java垃圾回收机制(Garbage Collection)

    引用博客地址:http://www.cnblogs.com/ywl925/p/3925637.html 以下两篇博客综合描述Java垃圾回收机制 第一篇:说的比较多,但是不详细 http://www. ...

  8. java垃圾回收机制串行_Java垃圾回收机制

    Java语言是一门自动内存管理的语言,不再需要的对象可以通过垃圾回收自动进行内存释放. Java运行时内存区域划分 JVM将Java程序运行时内存区域划分成以下几个部分: 程序计数器(Program ...

  9. java垃圾回收机制_JVM的垃圾回收机制——垃圾回收算法

    一.Java垃圾回收机制 在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行.在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者 ...

  10. java垃圾回收根对象_Java垃圾回收怎么理解?

    展开全部 Java的堆是一个运行时数据区,类的实例(对象)从中62616964757a686964616fe58685e5aeb931333339653664分配空间.Java虚拟机(JVM)的堆中储 ...

最新文章

  1. zoom:1是什么意思
  2. 一个公众号可以绑定几个小程序_如何实现微信小程序和公众号的绑定
  3. ExtJs_关于combobox的那些分页二三事
  4. 再谈fedora下的音乐和视频播放器的安装
  5. 票务系统思维导图_【思维导图】第六章:气体灭火系统
  6. silverlight动态创建WCF服务
  7. 机器学习实战(三)朴素贝叶斯NB(Naive Bayes)
  8. 雷军藏太深!除小米、迅雷外,还有这么多耳熟能详的企业?
  9. (转)DPDK 实现的不完全理解
  10. 计算机教育考试多少分及格,全国职称计算机考试多少分及格?
  11. java park_我可以在纯Java中实现park / unpark方法吗?
  12. 标定学习笔记(四)-- 手眼标定详解
  13. 专业工具软件Protel DXP复习资料
  14. 掌握到胃-奈氏图与伯德图的绘制
  15. AUTOCAD——创建块与插入块命令
  16. 【转】Mac QQ截图保存在哪里?
  17. 面试时候被问到为什么离职 离职原因 该如何回答?
  18. 扫雷——关于展开空格的算法
  19. python导入gif_Scratch3.0直接导入gif动画
  20. win10 更新之后使用win+s 或者 win+Q 出现新闻推荐和热门搜索

热门文章

  1. 修改系统文件更改权限
  2. 本地化、全球化、国际化测试的概念
  3. Windows 98光盘启动安装过程详细图解
  4. Phodit:打造智能的 Markdown 编辑器
  5. “熊猫烧香”病毒简介及特征
  6. 信息系统项目管理10大管理
  7. 数据挖掘十大算法--PageRank
  8. VUE ELEMENT UI 清空select 下拉选项
  9. mysql slave_pending_jobs_size_max_MySQL:关于Wating for Slave workers to free pending events等待...
  10. 单片机开发教程4——多文件编程