几种常见GC算法介绍

  • Post author:
  • Post category:其他


本文主要是对常用的GC算法(


引用计数法





标记-清除法





复制算法





标记-清除算法


)作出相关的说明,并对相关知识做简单的介绍。



一、什么是堆?




堆指用于动态(即执行程序时)存放对象的内存空间。


而这个对象,在


面向对象的编程中,它指“具有属性和行为的事物”


,然而在


GC的世界中,对象表示的是“通过应用程序利用的数据的集合”


。具体到Java堆,它是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。(此处的对象实例可以理解为前面所说的对象,因为不仅仅Java有自动的GC,python、JavaScript等语言也有,所以在广义上说对象是更好的表述,当然,Java的数组也是分配在堆上的)。



二、GC算法的评判标准


GC算法的评判标准主要是以下4点:



1、吞吐量


:即单位时间内的处理能力。



2、最大暂停时间


:因执行GC而暂停执行程序所需的时间。



3、堆的使用效率


:鱼与熊掌不可兼得,堆使用效率和吞吐量、最大暂停时间是不可能同时满足的。即可用的堆越大,GC运行越快;相反,想要利用有限的堆,GC花费的时间就越长。



4、访问的局部性


:在存储器的层级构造中,我们知道越是高速存取的存储器容量会越小(具体可以参看我写的存储器那篇文章)。由于程序的局部性原理,将经常用到的数据放在



版权声明:本文为iva_brother原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。