浅谈JAVA垃圾回收机制_第1页
浅谈JAVA垃圾回收机制_第2页
浅谈JAVA垃圾回收机制_第3页
浅谈JAVA垃圾回收机制_第4页
浅谈JAVA垃圾回收机制_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浅谈JAVA垃圾回收机制

摘要:垃圾回收机制是JAVA的主要特性之一,在对垃圾回收机制进行概述之后,本文

从"失去引用"和"离开作用域"这两个角度分析了JAVA程序中的对象在何种条件下满意

垃圾回收的要求。最终,本文简要介绍了垃圾回收机制的两个特性。

关键词:JAVA;垃圾回收机制;离开作用域;失去弓I用;自动性;不行预期性

作为一种适应于Internet计算环境、面对对象并具有平台无关性的编程语言,JAVA早

已确立了在IT界的地位,并因网络日益广泛的应用而变得越来越重要。因此,在高校中JAVA

也渐渐受到更多老师和同学的重视。

实际上,JAVA源自C++语言。但JAVA语言避开了C++中晦涩的结构,胜利翻越了

多重继承机制的恼人问题;JAVA的垃圾回收机制显著地提高了生产率,降低了简单度;在

网络背景下使用虚拟机,以及有关平安性和动态加载的一系列设计选择,迎合了正在消失的

需求和愿望。这些特性使Java不仅成为现有程序员的武器,而且也为新的程序员制造了富

强的市场空间。在JAVA语言的上述特性中,本文主要分析其垃圾回收机制。

一、JAVA垃圾回收机制概述

在VB、C++等某些程序设计语言中,无论是对象还是动态配置的资源或内存,都必需

由程序员自行声明产生和回收,否则其中的资源将不断消耗,造成资源的铺张甚至死机。由

于要预先确定占用的内存空间是否应被回收是特别困难的这就导致手工回收内存往往是一

项简单而艰难的工作。因此,当使用这些程序设计语言编程时,程序员不仅要考虑妇何实现

算法以满意应用,还要花费很多精力考虑合理使用内存避开系统崩溃.

针对这种状况,JAVA语言建立了垃圾回收机制。JAVA是纯粹的面对对象的编程语言,

其程序以类为单位程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,

JAVA的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能被再次采用,提

高程序的运行效率。垃圾回收不仅可以提高系统的牢靠性、使内存管理与类接口设计分别,

还可以使开发者削减了跟踪内存管理错误的时间从而把程序员从手工回收内存空间的繁重

工作中解脱出来。

JAVA垃圾回收机制另一个特点是,进行垃圾回收的线程是一种低优先级的线程,在一

个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。

下面本文从"对象的失去引用“和”对象离开作用域”这两个方面进行分析,研讨JAVA

程序中的对象什么时候可以被当作垃圾来进行回收。

二、对象的失去引用

通过下面的一段JAVA程序(例1),我们可以争论程序中的对象是否已经符合垃圾回

收的条件。请留意,我们只是争论某个对象是否符合被回收的条件,这并不意味着该对象将

被马上回收,关于这一点,本文后面还将进一步说明。

例1:

1.classComputer!}

2.publicclassGarbageCollector{

3.ComputermakeComputerQ{

4.ComputerlempComputer=newCumpuler();

5.returntempComputer;

6.)

7.publicstaticvoidmain(Stringargs[]){

8.GarbageCollectort=newGarbageCollector();

9.ComputernewComputer=t.makeComputer();

10.System.out.println("tempComputer所指向的对象可以被当作垃圾回

收")

11.Computercomputerl=newComputer();

12.Computercomputer2=newComputer();

13.computer2=computeri;

14.Computercomputer3=newComputer();

15.computer3=null;

16.System.out.println("computed所指向的对象可以被当作垃圾回收");

第11行(见图1),Computercompulerl=newComputer。;创建了引用(标签)

computeri,及对应的对象(真实的第一台电脑),可以形象地理解为把标签computeri

贴在第一台电脑上。

第12行(见图2)Computercomputer2=newComputer。;创建了标签computer2,

及对应的对象(真实的其次台电脑),并把标签computer2贴在其次台电脑上。

电脑3

computers

电脑1

电脑2

computeri

computer2

第13行(见图3),computer2=computerl;该语句的结果是使引用computer2指

向computeri指向的对象。就是说computer2原来指向的对象失去了引用,该对象会被

回收。所以,现在就有两个引用computeri和compute2指向原来computeri指向的对

象。形象地说,computerl=computer2的意思就是把computer2这个标签撕了下来贴

在了computeri标签所在的电脑上,所以电脑2就没有了标签而成为垃圾,电脑1就有了

两个标签。

第14行(见图4),Con】pulercomputer3=newCompuler。;创建了标签compule「3,

及对应的对象(真实的第三台电脑),并把标签computers贴在第三台电脑上。

电脑1

computeri

computer2

电脑3

computers

第15行(见图5),computer3=null;使引用该computers无指向,该行相当于把

computed标签从电脑上撕了下来。第三台电脑由于失去引用而无法访问,就成为了垃圾

而被JAVA自动回收。

第17行(见图6),computerl=null;该行相当于把computeri标签从电脑上撕了

下来。但是computeri标签所在的第一台电脑并没有成为垃圾,由于还有一个computer2

标签贴在上面。

应指出的是,虽然可以通过将对象的引用变量初始化为null值来示意垃圾收集线程收

集该对象,但此时假如该对象连接有大事监听器,那它还是不行以被收集。所以在设一个引

用变量为null值之前,应留意该引用变量指向的对象是否被监听,若有,要首先除去监听

,然后才可以赋空值。

三、对象离开作用域

我们知道,在传统的面对过程语言(如C语言)中,当一个方法执行完毕,其中的局

部变量就因离开了作用域而被释放;以后当该方法再次被调用时,其中的局部变量会被重新

创建。但在VB、C++等引入面对对象方法的编程语言中,其程序中基本类型的变量可以在

离开作用域后被自动释放,但对象并不能被自动释放。JAVA语言的垃圾回收线程通过自动

跟踪对象的使用状况,能够使程序中的对象类似于基本类型那样在离开作用域之后被回收。

基于例1中的第1行~第10行,可以分析一个JAVA对象如何因"离开作用域〃而满

意被回收的条件。

临时电脑

tempComputer

第4行(见图7),ComputertempComputer=newtempComputer。;创建了引用

(标签)tempComputer,及对应的对象(真实的电脑),可以形象地理解为把标签

tempComputer贴在临时电脑上。

第9行,ComputernewComputer=t.makeComputer。;通过调用t的方法

makeComputer。来创建一个Computer的对象,并用标签把newComputer贴在该电脑

±o对象tempComputer是一个局部变量,xc在方法makeComputer结束后,系统会自

动地把函数返回值作T分拷贝复制给调该方法的弓I用,然后对象tempComputer所被当作

垃圾回收。

四、JAVA垃圾回收机制的特点

前面我们争论了JAVA程序中的对象在什么条件下满意被回收的条件,而垃圾回收线程

如何回收这些"垃圾",则遵循以下两个特性。

1.自动性。Java技术供应了一个系统级的线程,即垃圾收集器线程,来也躺每一块

安排出去的内存空间,当Java虚拟机处于空闲循环时,垃圾收集器线程会自动检查每一块

安排出去的内存空间,然后自动回收每一块可以回收的无用的内存块。

2.不行预期性。一个对象成为了垃圾,但是你不能断言,该对象在这行以后就马上

被清除,甚至有可能当程序结束后,该对象仍旧占用内存。像Windows这样的软件经常会

消失内存不足的状况,JAVA程序很少消失就是由于可以自动回收内存。然而,由于JAVA

也不能保证准时地清除无用的对象,所以JAVA程序也会消失

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论