ajie

Java天下社区 http://www.javatx.cn 欢迎大家上来交流Java技术
posts - 4, comments - 8, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java内存管理之软引用(Soft Reference)

Posted on 2005-12-18 00:29 ajie 阅读(10977) 评论(6)  编辑  收藏
软引用(Soft  Reference)的主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存足够的时候,他们通常不被回收。另外,这些引用对象还能保证在Java  抛出OutOfMemory异常之前,被设置为null。他可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。

     下面是软引用的实现代码:
 
 1/**
 2 * 该类演示了Soft Reference的应用
 3 * 版权 本文版权属Java天下
 4 */

 5package cn.javatx;
 6
 7import java.lang.ref.SoftReference;
 8
 9/**
10 * @author ajie
11 */

12
13public class softReference {
14
15    /**
16     * @param args
17     */

18    public static void main(String[] args) {
19        // TODO Auto-generated method stub
20        A a = new A();
21        
22        //使用a
23        a.test();
24
25        //使用完了a,将它设置为soft引用类型,并且释放强引用
26        SoftReference sr = new SoftReference(a);
27        a = null;
28        
29        //下次使用
30        if (sr != null{
31            a = (A)sr.get();
32            a.test();
33        }
 else {
34            //GC由于低内存,已释放a,因此需要重新装载
35            a = new A();
36            a.test();
37            a = null;
38            sr = new SoftReference(a);
39        }

40    }

41
42}

43
44class A {
45    public void test() {
46        System.out.println("Soft Reference test");
47    }

48}

49


       软引用技术的引进使Java应用可以更好的管理内存,稳定系统,防止系统内存溢出,避免系统崩溃。因此在处理一些占用内存大而且声明周期较长,但使用并不频繁的对象时应尽量应用该技术。但事物总带有两面性的,有利也有弊,在某些时候对软引用的使用会降低应用的运行效率与性能,例如:应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程中发生了变化,都会给重新创建对象与初始化对象带来不同程度的麻烦,有些时候我们要权衡利弊择时应用。

Java天下
http://www.javatx.cn

评论

# re: Java内存管理之软引用(Soft Reference)   回复  更多评论   

2007-06-18 16:22 by 史寿伟
使用 if (sr != null) { 来判断软引用的对象是否可用是不对的。

sr 始终是不为空的,可能为空的是 sf.get() 而不是 sf 本身。

# re: Java内存管理之软引用(Soft Reference)   回复  更多评论   

2007-11-01 10:43 by snoopy
@史寿伟
ding

# re: Java内存管理之软引用(Soft Reference)   回复  更多评论   

2008-12-19 13:48 by 1111
感觉有问题..

# re: Java内存管理之软引用(Soft Reference)   回复  更多评论   

2010-06-11 16:47 by Rosen
@史寿伟
的确不需要再去判断了。

# re: Java内存管理之软引用(Soft Reference)   回复  更多评论   

2011-11-02 17:02 by DLevin
赞同,这个例子感觉不好。。。。@史寿伟

# re: Java内存管理之软引用(Soft Reference)   回复  更多评论   

2012-12-31 17:39 by geeksnail
软引用应该用在频繁使用的对象上吧,缓存不就是为了频繁使用吗?最后的总结是不是有点问题?

只有注册用户登录后才能发表评论。


网站导航: