精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-06
servlet是线程池实现的典型,ejb是对象池实现的典型,至于对象池有哪些好处?搞不清楚,不知道它为什么会提高性能?
|
|
返回顶楼 | |
发表时间:2007-02-06
jamesby 写道 servlet是线程池实现的典型,ejb是对象池实现的典型,至于对象池有哪些好处?搞不清楚,不知道它为什么会提高性能?
其实,对于有状态 bean,我还是理所当然的认为对象池可以提高效率的,因为1,系统确确实实需要有状态 bean 的多个实例(就因为他们是有状态的);2,创建一个 bean 的开销可能很大。 但对于无状态 bean,我的疑问继续成立 |
|
返回顶楼 | |
发表时间:2007-02-06
无状态SessionBean确实没有必要搞对象池,这一点Rod Johnson在《without EJB》里面有很详细的论述。
|
|
返回顶楼 | |
发表时间:2007-02-06
引用 这就是我的困惑所在。我们都知道,可以用无状态的 Singleton 来封装一些领域服务。比如说,UserService,就可以是一个 Singleton class。在实际使用时,可以用 IoC 容器的依赖注入方法得到它的一个(全 JVM 唯一的)Singleton 实例,然后再调用它里面的方法,比如说: Singleton 并不是这样的吧 他只是在 servletcontext里面保存了这么一份 beans 每个request过来的时候,使用的是threadlocal threadlocal 可以说是“拷贝”了 servletcontext里面的beans 可以说是一个副本 这样可以保证多个request使用的beans互相不影响(具体可以理解一下threadlocal ) threadlocal 的实现本身就类似 对象池 ,不过这个东西是语言支持的,而不是自己来实现的。 你说的synchronize 在一般bean上都不会起作用,原理也是这样 用的根本不是同一个对象(当然static得注意),除非在同一个request中存在多次调用产生 synchronize 现象。 引用 (全 JVM 唯一的)Singleton 实例 是否你的理解出偏差了呢?
|
|
返回顶楼 | |
发表时间:2007-02-06
robbin 写道 无状态SessionBean确实没有必要搞对象池,这一点Rod Johnson在《without EJB》里面有很详细的论述。
无状态Sb本身就是借助对象池来体现“无状态”,如果没有Pool,则创建出来的对象必然有状态,只是在于是否被捕获并且表现出来。我个人觉得无状态sb用内存换速度,一定程度上减少创建对象的开销,但是现在内存不值钱,而且对象池的稳定性的确让人忧虑,本人写的大多数对象池都问题多多! |
|
返回顶楼 | |
发表时间:2007-02-07
(全 JVM 唯一的)Singleton 实例肯定是不对的,准确地说应该是一个ClassLoader一个实例,当然,父ClassLoader 已经load了一个实例,则子不需要Load实例
|
|
返回顶楼 | |
发表时间:2007-02-07
robbin 写道 无状态SessionBean确实没有必要搞对象池,这一点Rod Johnson在《without EJB》里面有很详细的论述。
多谢资深发言指教。还要多问一句,“无状态SessionBean确实没有必要搞对象池”,其原因是不是就是我提出的那个呢? |
|
返回顶楼 | |
发表时间:2007-02-07
jianfeng008cn 写道 Singleton 并不是这样的吧 他只是在 servletcontext里面保存了这么一份 beans 每个request过来的时候,使用的是threadlocal threadlocal 可以说是“拷贝”了 servletcontext里面的beans 可以说是一个副本 这样可以保证多个request使用的beans互相不影响(具体可以理解一下threadlocal ) threadlocal 的实现本身就类似 对象池 ,不过这个东西是语言支持的,而不是自己来实现的。 你说的synchronize 在一般bean上都不会起作用,原理也是这样 用的根本不是同一个对象(当然static得注意),除非在同一个request中存在多次调用产生 synchronize 现象。 引用 (全 JVM 唯一的)Singleton 实例 是否你的理解出偏差了呢?
我一向认为,Spring对于(缺省状态下为Singleton模式的)Bean,都是在整个 JVM 里面保持唯一一个实例的。 可能是我一直以来都搞错了吧。因为我没有真正去仔细了解Spring对 Singleton Bean 是如何提供支持的。 |
|
返回顶楼 | |
发表时间:2007-02-07
retreat 写道 robbin 写道 无状态SessionBean确实没有必要搞对象池,这一点Rod Johnson在《without EJB》里面有很详细的论述。
无状态Sb本身就是借助对象池来体现“无状态”,如果没有Pool,则创建出来的对象必然有状态,只是在于是否被捕获并且表现出来。我个人觉得无状态sb用内存换速度,一定程度上减少创建对象的开销,但是现在内存不值钱,而且对象池的稳定性的确让人忧虑,本人写的大多数对象池都问题多多! 我不这样认为。相反,我觉得: 1,应根据其具体需要来确定一个bean是否有状态; 2,有状态bean需要对象池,因为我们肯定会同时需要多个有状态bean,所以保持一个池可以提高效率; 3,无状态bean不需要对象池,JVM 唯一的 singleton 就可以了,并不会增加任何开销。 |
|
返回顶楼 | |
发表时间:2007-02-07
jamesby 写道 (全 JVM 唯一的)Singleton 实例肯定是不对的,准确地说应该是一个ClassLoader一个实例,当然,父ClassLoader 已经load了一个实例,则子不需要Load实例
请问,你所说的,是 Spring 的做法吗? 而且,在缺省条件下,不是整个 JVM 只有一个 ClassLoader 吗? |
|
返回顶楼 | |