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
*/
5
package
cn.javatx;
6
7
import
java.lang.ref.SoftReference;
8
9
/** */
/**
10
*
@author
ajie
11
*/
12
13
public
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
44
class
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
软引用应该用在频繁使用的对象上吧,缓存不就是为了频繁使用吗?最后的总结是不是有点问题?
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Powered by:
BlogJava
Copyright © ajie
日历
<
2005年12月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
Java天下社区 http://www.javatx.cn 欢迎大家上来交流Java技术
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2006年1月 (1)
2005年12月 (3)
搜索
最新评论
1. re: Java内存管理之软引用(Soft Reference)
软引用应该用在频繁使用的对象上吧,缓存不就是为了频繁使用吗?最后的总结是不是有点问题?
--geeksnail
2. re: Java内存管理之软引用(Soft Reference)
赞同,这个例子感觉不好。。。。@史寿伟
--DLevin
3. re: Java内存管理之软引用(Soft Reference)
@史寿伟
的确不需要再去判断了。
--Rosen
4. re: 利用Java Mail API 开发邮件通知服务
评论内容较长,点击标题查看
--淡然一笑
5. re: Java内存管理之软引用(Soft Reference)
感觉有问题..
--1111
阅读排行榜
1. Java内存管理之软引用(Soft Reference) (10977)
2. Filter Servlet实例应用(5043)
3. 利用Java Mail API 开发邮件通知服务 (2695)
4. Excel文档生成解决方案 (JAVA Servlet)(1484)
评论排行榜
1. Java内存管理之软引用(Soft Reference) (6)
2. 利用Java Mail API 开发邮件通知服务 (2)
3. Filter Servlet实例应用(0)
4. Excel文档生成解决方案 (JAVA Servlet)(0)