全新java初学者实践教程14(java SE5.0版)----垃圾收集器

转载 2007年10月03日 11:42:00

   用过C++编程的人知道,编的时候总是要跟踪所创建的对象,并且需要显示地删除不用的对象。这种方式太麻烦了,容易出错。写了那么多代码,能记住吗,要是把有用的给删了怎么办,要是有没用的忘删了怎么办?这些问题是很严重的。在java语言中采用的垃圾收集器这种方式管理内存,就很方便也很安全了。垃圾收集器,可以自动确定哪个对象不再被利用,它可以自动将它删除。这也是java语言的一大优势。

    我们要想显示的删除一个对象的引用也很简单,将该引用的变量赋值为null不就行了吗?对于垃圾收集器来说,当程序员创建对象时,垃圾收集器就开始监控这个对象的地址、大小以及使用情况。通常,垃圾收集器采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是“可用的”,哪些对象是“不可用的”。当垃圾收集器确定一些对象为“不可用”时,垃圾收集器就回收这些内存空间。

    可是垃圾收集器却以较低的优先级在系统空闲周期中执行,通俗一点说就是它级别低,别人不运行时候才轮到它,因此垃圾收集器的速度比较慢。有些时候我们会使用System.gc()。手动回收。这样来提高性能。

    对于垃圾收集器来说还有一个值得一提的是finalize()这个方法,每一个对象都有一个finalize( )方法,这个方法是从Object类继承来的。它用来回收内存以外的系统资源,就像是文件处理器和网络连接器。该方法的调用顺序和用来调用该方法的对象的创建顺序是无关的。换句话说,书写程序时该方法的顺序和方法的实际调用顺序是不相干的。这只是finalize( )方法的特点。还有,每个对象只能调用finalize( )方法一次。如果在finalize( )方法执行时产生异常(exception),则该对象仍可以被垃圾收集器收集。那是一定了,不能说用到finalize()了。垃圾收集器就什么也不做了啊。finalize()的工作量是很大的哦

    总结:

    java用了垃圾收集器的内存管理方式,并不是说它完全的好。有的时候会影响它的性能,我们还是要手动来收集的。但是要是像C++那样完全手动来收集的话,那也实在是太麻烦了而且不是很安全。

 根据垃圾收集器的工作原理,我们可以通过一些技巧和方式,让垃圾收集器运行更加有效率。

 1.最基本的建议就是尽早释放无用对象的引用。
 大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null。
 2.尽量少用finalize函数。finalize函数是java提供给程序员一个释放对象或资源的机会。但是,它会加大垃圾收 集器的工作量,因此尽量少采用finalize方式回收资源。
 3.当程序有一定的等待时间,程序员可以手动执行System.gc(),通知垃圾收集器运行,但是java语言规范并不保证垃圾收集器一定会执行。

 

java初学者实践教程16-static关键字

   这已经是本系列教程的第16次课了,在我们前几次课的基础上,我们继续学习一下java的语法。这回我们,讲static关键字。     static关键字可以用来修饰类的变量,方法和内部类。stat...
  • cyp0207
  • cyp0207
  • 2007年11月17日 10:00
  • 275

[JAVA]全新java初学者实践教程(全)

本教程适合初学者,高手飘过。1、全新java初学者实践教程1(Java SE5.0版)--配置环境变量 2、全新java初学者实践教程2(Java SE5.0版)-“HelloWorld”和jdk的...
  • dzq0371
  • dzq0371
  • 2010年09月15日 10:11
  • 189

全新java初学者实践教程15(java SE5.0版)--jdk5中方法的重载与重写

    Java语言中的概念就是多,这回又有两个概念,重载和重写。这是两个新概念,也是两个令初学者容易混淆的概念。他们的概念截然不同,只不过都有个“重”字,就以为是很像的。下面解释一下这两个概念:  ...
  • Persuse3
  • Persuse3
  • 2007年07月12日 16:40
  • 441

全新java初学者实践教程17(java SE5.0版)--基本语法6--final关键字

     昨天学了static关键字,今天接着学习final关键字。final关键字有三个东西可以修饰的。修饰类,方法,变量 详细解释一下:     1、在类的声明中使用final     使用了fi...
  • jessieca
  • jessieca
  • 2007年10月03日 12:19
  • 513

全新java初学者实践教程16(java SE5.0版)----基本语法5

    这已经是百家拳软件项目研究室的第16次课了,在我们前几次课的基础上,我们继续学习一下百家拳软件项目研究室的第16次课了,在我们前几次课的基础上,我们继续学习一下java的语法。这回我们,讲st...
  • jessieca
  • jessieca
  • 2007年10月03日 12:15
  • 617

全新java初学者实践教程9(java SE5.0版)----jdk5的数组

     今天我们讲个不一样的概念――数组,数组也没什么不好理解的,就是一组数。不过这组数有点特性。今天我们的任务就是,了解这个有特性的这组数。下面我们具体讲一下它有哪些特性:1、数组中的元素是同一类...
  • Persuse3
  • Persuse3
  • 2007年07月07日 17:52
  • 539

全新java初学者实践教程11(java SE5.0版)----jdk5的泛型声明

怎么也发不上去,看原文吧:http://www.100jq.com/show.aspx?id=18&cid=11 
  • Persuse3
  • Persuse3
  • 2007年07月09日 11:45
  • 426

java初学者实践教程14-垃圾收集器

   用过C++编程的人知道,编的时候总是要跟踪所创建的对象,并且需要显示地删除不用的对象。这种方式太麻烦了,容易出错。写了那么多代码,能记住吗,要是把有用的给删了怎么办,要是有没用的忘删了怎么办?这...
  • cyp0207
  • cyp0207
  • 2007年11月17日 09:58
  • 282

全新java初学者实践教程1-8

全新java初学者实践教程1(Java SE5.0版)--配置环境变量        最近我发现不少初学者,学习java的时候,看了好多java的历史、优点和应用范围。对于这些知识,并不难理解。我也当...
  • gumpassion
  • gumpassion
  • 2007年08月29日 12:19
  • 925

全新java初学者实践教程9-20

 全新java初学者实践教程9(java SE5.0版)----jdk5的数组 作者:100jq      今天我们讲个不一样的概念...
  • gumpassion
  • gumpassion
  • 2007年08月29日 12:28
  • 1013
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全新java初学者实践教程14(java SE5.0版)----垃圾收集器
举报原因:
原因补充:

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