首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
Java垃圾回收新算法
来源:本站整理  作者:佚名  2011-05-23 08:55:51



Java从诞生以来以其在网络应用开发上独特的魅力以及“一次开发,随处运行”的可移植性引起了人们极大的兴趣。Java与以往的高级语言如C/C++相比,在开发方面具有很大的优势,其中以对象内存管理机制中的垃圾处理机制(GC)最为突出。

  1 C/C++与Java对象内存管理差别

  C/C++将内存划分成四部分:数据区、代码区、栈区、堆区。Java则把内存划分成三部分即代码区、栈区、堆区,代码区主要用于存放程序的代码,栈区主要用于存放局部变量、内部变量等中间性变量,堆区主要用来存放对象。

  C/C++中的对象内存管理是通过语句new()/delete()或malloc()/free()进行申请和释放的。用new()或malloc()申请内存后,若不使用delete()或free()进行释放,则所申请的内存一直被占用,即使不使用也不能自动释放,必须人为释放,导致编程工作很繁琐。

  Java中的对象内存管理则改进了对内存的释放过程,使用new()或其他方法申请的内存在不使用时,可以自动进行垃圾处理,释放内存,从而节省内存,使内存的使用更加高效、合理。

  Java中可以通过三种方法来销毁对象实现内存释放,这三种方法被称为Java销毁对象的三把利剑:垃圾回收器;finalize方法;利用System.gc方法强制启动垃圾回收器。

  垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法实现资源自动回收的功能系统,会自动进行GC策略。

  2 GC概述

  Java垃圾处理主要是针对堆的管理,对堆中不使用的空间进行回收处理。判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个“活动的部分”所引用,此时该对象的内存空间已经无用。所谓“活动的部分”,是指程序中某部分参与程序的调用,正在执行过程中,尚未执行完毕。

  具体以下两例予以说明:

  实例1:

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

  matrix=null;

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

  实例2:

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

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

  m1=m2;

  此例中,第一句是用new语句在堆中为数组申请了一个空间,用m1引用这个数组。第二句是用new语句在堆中为数组申请了一个空间,用m2引用这个数组。第三句是改变引用对象,把m2的引用赋给m1,则此时m1也引用m2引用的对象数组,因此,m1原来引用的数组无人引用,成为垃圾。

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:19,312.50000 毫秒