新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Java垃圾回收新算法

Java垃圾回收新算法

作者: 时间:2011-05-20 来源:网络 收藏
4.1.2具体

本文引用地址:https://www.eepw.com.cn/article/150730.htm

  (1)程序开始运行,对象动态地申请堆区,这时,每个块的计数器启动,根据引用对象的标记位情况来改变计数器的值,为1则计数器加1,8个计数器值放在数组里,并比较8个计数器值的大小,选取最大的计数器所在块,进行扫描。

  (2)扫描出的转移到删除区,等待被删除。

  (3)继续比较计数器值,但已经进行扫描的块不参加此后的比较,待删除的占的空间达到min值时,器开始对活跃区压缩内存碎片,并且在删除区同时开始进行垃圾删除申请。

  (4)当删除区的空间达到了max值时,删除区的垃圾还没有被删除,这时停止活跃区的扫描,等待删除区进行垃圾删除。

  4.2 实例分析

  看下面一段程序:

  int [][] m1=new int[2][3];

  int [][] m2=new int[2][3];

  m1=m2;

  此例中,第一句是用new语句在堆中为数组申请了一个空间,然后用matrix引用此空间的对象(这里数组可以理解为对象),此时这个内存空间就是有用的。第二句是给matrix赋空值,matrix则不再引用此数组。此时,这个空间就是无用的。

  对于原来的,m1引用的数组在堆中是随机存放的,若要查找垃圾,则会遍历整个堆内存,先标记,然后再清理垃圾。设耗费时间为Ta。

  m1引用的数组在堆中是随机存放的,所以假设其放在活跃区中的cnt[x]区(x取值为0~7之一),下面分两种情况来考虑:

  (1)最好的情况,m1原来引用的数组放在cnt1中为数组cnt[x]中最大的数,则查找到这个垃圾的时间为: T8+cnt[x]。

  

  由此可以节省7Ta/16的时间。此新可以大大减少垃圾处理所需的时间。

  语言对垃圾的处理是利用的垃圾处理器自动进行的,JVM虽然没有明确程序员必须了解垃圾处理器的过程和实质,但是,一个优秀的程序员应该掌握和熟悉垃圾处理器的工作机制,充分利用好内存空间,减少不必要的空间浪费,从而使程序更好地运行。


上一页 1 2 3 下一页

关键词: 算法 回收 垃圾 Java

评论


相关推荐

技术专区

关闭