优秀的Java程序员必须了解GC的工作原理

豆豆网   技术应用频道   2007年12月28日  【字号: 收藏本文

内容摘要:本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能。

  程序如何与GC进行交互

  Java2增强了内存管理功能,增加了一个java.lang.ref包,其中定义了三种引用类。这三种引用类分别为SoftReference、WeakReference和PhantomReference.通过使用这些引用类,程序员可以在一定程度与GC进行交互,以便改善GC的工作效率。这些引用类的引用强度介于可达对象和不可达对象之间。

  创建一个引用对象也非常容易,例如如果你需要创建一个SoftReference对象,那么首先创建一个对象,并采用普通引用方式(可达对象);然后再创建一个SoftReference引用该对象;最后将普通引用设置为null.通过这种方式,这个对象就只有一个SoftReference引用。同时,我们称这个对象为SoftReference对象。

  SoftReference的主要特点是据有较强的引用功能。只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引用对象还能保证在Java抛出OutOfMemory异常之前,被设置为null.它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory.以下给出这种引用类型的使用伪代码;

//申请一个图像对象 
   Imageimage=newImage();//创建Image对象 
   … 
   //使用image 
   … 
   //使用完了image,将它设置为soft引用类型,并且释放强引用; 
   SoftReferencesr=newSoftReference(image); 
   image=null; 
   … 
   //下次使用时 
   if(sr!=null)image=sr.get(); 
   else{ 
   //由于GC由于低内存,已释放image,因此需要重新装载; 
   image=newImage(); 
   sr=newSoftReference(image); 
   }

责编:豆豆技术应用

正在加载评论...