Java垃圾回收器

转载 2018年04月16日 15:13:42
引用记数:一种简单但速度很慢的技术,每个对象都含有一个引用计数器,当引用连接值对象时,引用记数加1,;当引用离开作用域或被置为null时,引用记数减1,遍历所有对象,管理引用计数的开销不大,但这项开销在整个程序生命过程中持续发生。
缺陷在于如果对象之间存在循环引用,可能出现"对象应该被被回收,但引用记数不为0",定位交互引用的的对象组所需工作量极大。常用来说明垃圾收集的工作方式,未被应用于任何一种Java虚拟机中。

在一些更快的模式中,垃圾回收器并非基于引用计数技术,它们依据的思想是:对任何活的对象,一定能追踪到其存活的堆栈或静态存储区之中的引用,这种方式确保了你访问过的对象必须是活的。这就解决了"交互自引用的对象组"的问题,
在这种方式下,Java虚拟机将采用一种自适应的垃圾回收技术。
有一种做法名为"停止--复制",即先暂停程序运行,然后将左右存活的对象从当前堆复制到另一个堆,没有被复制的全是垃圾。当对象被复制到新堆,它们是一个挨着一个的,所以新堆保持紧凑排列。对于这种"复制回收器"而言,效率会降低,首先得有两个堆,维护比实际需要多一倍的时间,
其次在于复制,项目稳定后很少甚至不产生垃圾,尽管如此,复制回收器仍然将所有的内存自一处复制到另一处,这很浪费。为了避免这种浪费,一些Java虚拟机会进行检查:要是没有新垃圾产生,就会转换到另一种工作模式,称为"标记--清扫"。
"标记--清扫"的思路同样是从堆栈和 静态存储区出发,遍历所有的引用,进而找出所有存活的对象,当找到一个存活对象,就会给对象设一个标记,这个过程不会回收任何对象,只有当标记工作全部完成后,才会开始清理工作,没有标记的对象将被释放,不会发生任何重复动作。所以剩下的
堆空间是不连续的垃圾回收器通过重新整理剩下的对象得到连续的堆空间。
如果所有的对象都很稳定,垃圾回收器的相率降低的话,就切换到"标记--清扫"方式,虚拟机会跟踪"标记--清扫"的效果,如果堆空间出现很多碎片,就切换回"停止--复制"方式,这边是"自适应技术"。

JAVA常用的垃圾回收器

Serial收集器:(串行收集器)这个收集器是一个单线程的收集器,但它的单线程的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工...
  • liudezhicsdn
  • liudezhicsdn
  • 2016-04-04 17:53:22
  • 1241

Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理

下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1,先介绍一些垃圾收集的相...
  • tjiyu
  • tjiyu
  • 2017-01-02 23:41:24
  • 9784

Java 垃圾回收器种类

在Java中,垃圾回收是一个自动的进程可以替代程序员进行内存的分配与回收这些复杂的工作。Java有四种类型的垃圾回收器: 串行垃圾回收器(Serial Garbage Collector) 并行垃圾回...
  • gmemai
  • gmemai
  • 2015-09-28 16:53:15
  • 552

Java GC 垃圾回收器的类型小结

JVM GC 垃圾回收器类型小结 JVM的垃圾回收器大致分为四种类型: 1、串行垃圾回收器 2、并行垃圾回收器 3、并发标记扫描垃圾回收器 4、G1垃圾回收器 1、串行垃圾回收器 串行垃圾回收器在...
  • u014388509
  • u014388509
  • 2014-10-22 14:26:21
  • 3851

关于Java垃圾回收器(GC)的知识整理

这两天整理了一下Java中有关垃圾回收器(GC)的知识,在这里写篇blog总结一下。在进入垃圾回收器的内容之前,我们先来回顾一下Java的内存模型。JVM将内存区域区分成下述几种类型:程序计数器区,栈...
  • xingor
  • xingor
  • 2015-10-20 23:38:14
  • 597

Java的内存区域以及各种垃圾回收算法和垃圾回收器

Java的内存区域可以分为 方法区(区别于永生代),堆,JVM栈,本地方法栈,程序计数器。 其中方法区,堆是线程共享的,JVM栈和本地方法栈,程序计数器是线程独有的。 ...
  • a497006686
  • a497006686
  • 2016-09-08 18:40:59
  • 1184

垃圾回收器的基本原理

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过...
  • Amen_Wu
  • Amen_Wu
  • 2017-01-09 23:25:05
  • 1698

Jvm垃圾回收器详细

1, 串行回收器1.1, 新生代串行回收器 (1)特点:   –它仅仅使用单线程进行垃圾回收   –它是独占式的垃圾回收   –进行垃圾回收时, Java应用程序中的线程都需要暂...
  • lghuntfor
  • lghuntfor
  • 2016-04-03 23:33:12
  • 5841

Java 垃圾回收器的GC机制,看这一篇就够了

导语     垃圾回收器—GC(Garbage Collection),它与“java面向编程”一样是java语言的特性之一;它与“ c/c++语言”最大区别是不用手动调用 free()  和 del...
  • csdn_aiyang
  • csdn_aiyang
  • 2017-06-06 11:17:31
  • 1046

垃圾回收器种类

在这篇教程中我们将学习几种现有的垃圾回收器。在Java中,垃圾回收是一个自动的进程可以替代程序员进行内存的分配与回收这些复杂的工作。这篇是垃圾回 收教程系列的第三篇,在前面的第2部分我们看到了在Jav...
  • chenleixing
  • chenleixing
  • 2015-04-22 09:07:44
  • 2823
收藏助手
不良信息举报
您举报文章:Java垃圾回收器
举报原因:
原因补充:

(最多只允许输入30个字)