日期:2014-05-17  浏览次数:20970 次

spring bean 生命周期问题

1、spring的文档里说明,如果bean的作用域不设置成singleton的话,spring容器是不会去负责这个bean的整个生命周期,而是交给客户端去处理。这句话的意思是不是说,我得写相关的代码来管理这些bean,甚至是销毁。如果是这样的话,我该什么时候去销毁,怎么去销毁?

2、session 中存放大量数据的话,会不会导致jvm内存消耗过大,而抛内存溢出异常(java.lang.OutOfMemoryError)?

3、web 应用运行一段时间就变的很卡,重启下又恢复正常。怀疑是不是以上两种情况所导致,望各路神仙显灵,帮小弟解答一下,万分感谢!!!

------解决方案--------------------
session 中最好不要存放大量数据,并发小没大问题,并发一上去就不好说了。
运行时间越久,创建的对象越多,但并非所有对象都是有用的,然而由于你管理不当,垃圾回收没法将这些对象回收,日积月累,最终导致内存溢出。这就是 Java 中的内存泄漏。
从你的描述看来,程序不是在高并发时内存不足,而是在长时间运行后发生,这种内存泄漏基本排除 session 造成的可能。检查你的那些静态变量和 singleton 对象,他们的嫌疑最大。
------解决方案--------------------
1.一般spring的bean默认配置都是单例的。
销毁的方法
<bean id="..." class="..." destroy-method="..."></bean>
很常见的如dateSource的建立。

2.session 太多,占服务器内存,易丢失,维护困难。

3.数据拥塞,数据流,文件流不释放等也可能引起web运行不顺畅。。