JiveJdon Community Forums
在线259人 Home | 论坛 | 培训咨询 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 5 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
javafu

发表文章: 10
注册时间: 2005年04月18日 10:36
给他发消息
单例用来做缓存行吗? 发表: 2005年06月03日 11:54 回复
最近做的一个东西里面的用户信息里面要有省份的信息,我建了一个表用来存省份id和省份名称,如province_id(省份id),province(省份名称),然后用户信息表里写的是province_id,但是后来发现province_id调用的地方很多,每次都要去查省份表得到省份,很耗资源(应该是耗资源的吧),于是决定把它做成缓存,就是写一个单例类,在构造函数里面将省份id,省份读到hashtable里面,然后给出一个getprovince的方法,根据省份id得到省份,不知道这样是不是可行,能不能达到节省资源的目的?
banq

发表文章: 9114
注册时间: 2002年08月03日 17:08
给他发消息
Re: 单例用来做缓存行吗? 发表: 2005年06月04日 21:02 回复
可以,这是缓存的基本原理
javafu

发表文章: 10
注册时间: 2005年04月18日 10:36
给他发消息
Re: 单例用来做缓存行吗? 发表: 2005年06月07日 09:48 回复
我还有个疑问,我们现在用的是tomcat做服务器,这个单例类会不会被回收掉,而不是一直存在于系统里面呢?
banq

发表文章: 9114
注册时间: 2002年08月03日 17:08
给他发消息
Re: 单例用来做缓存行吗? 发表: 2005年06月07日 09:57 回复
>单例类会不会被回收掉,
如果你这个单例类是使用静态单态模式实现,不会被收掉,而且不安全,它是JVM中的单例,在一个JVM中运行的多个Web项目都可以访问这个单例。

这是使用单例的一个陷阱,因此,你自己必须在编程将单例中的对象引用全部清除,否则造成内存泄漏。

建议将单例类放入Web容器的Application scope中,使用servletcontext.setAttribute保存这个类。
javafu

发表文章: 10
注册时间: 2005年04月18日 10:36
给他发消息
Re: 单例用来做缓存行吗? 发表: 2005年06月08日 10:50 回复
谢谢板桥的解答!
在我的理解,如果把一个类放到了 Application scope 里面,那么他在系统里面就应该只有一个实例,是这样吗?如果是的话,那为什么还要将这个类写成单例类呢?
板桥大哥能否解答一下,jive论坛的缓存是如何实现的?也是单例类吗?
banq

发表文章: 9114
注册时间: 2002年08月03日 17:08
给他发消息
Re: 单例用来做缓存行吗? 发表: 2005年06月08日 20:56 回复
这是两种实现单个实例的方式,有时单例指单态模式,有时就指单个实例。我觉得是单个实例比较好。

Jive缓存也是使用单例实现的。
这个主题有 5 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam