spring bean 生命周期问题

rihaduo202 2013-12-05 08:30:47

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

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

3、web 应用运行一段时间就变的很卡,重启下又恢复正常。怀疑是不是以上两种情况所导致,望各路神仙显灵,帮小弟解答一下,万分感谢!!!
...全文
348 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rihaduo202 2013-12-06
  • 打赏
  • 举报
回复
引用 2 楼 NNTT2010 的回复:
1.一般spring的bean默认配置都是单例的。 销毁的方法 <bean id="..." class="..." destroy-method="..."></bean> 很常见的如dateSource的建立。 2.session 太多,占服务器内存,易丢失,维护困难。 3.数据拥塞,数据流,文件流不释放等也可能引起web运行不顺畅。。
谢谢这位朋友解答。 现在的疑问是: 1、struts中每个action都是交给spring去管理、每个都是一个bean,那么这些bean的scope属性到底是设置成singleton还是prototype合适呢?为什么? 2、destroy-method 的意思是销毁这个bean的时候执行的方法,类似于注解中的@predestroy,而spring不负责bean的生命周期的话,这个方法是什么时候被调用呢?tomcat关闭?还是等客户端去调用?如果做不到真正意义上的销毁,这些对象是不是一直存放在服务器,占用服务器内存呢?
rihaduo202 2013-12-06
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
session 中最好不要存放大量数据,并发小没大问题,并发一上去就不好说了。 运行时间越久,创建的对象越多,但并非所有对象都是有用的,然而由于你管理不当,垃圾回收没法将这些对象回收,日积月累,最终导致内存溢出。这就是 Java 中的内存泄漏。 从你的描述看来,程序不是在高并发时内存不足,而是在长时间运行后发生,这种内存泄漏基本排除 session 造成的可能。检查你的那些静态变量和 singleton 对象,他们的嫌疑最大。
版主果然英明! 我的问题确实不是因为并发所导致,因为现在还在试运行阶段,有可能确实创建对象、销毁对象、建立连接、释放连接等地方出了问题。 但是程序有很多人开发,现在基本不可能把所有人代码挨个检查,修改,所以还想请教下这种情况,该怎么解决或者从哪里入手查看? 谢谢了。
Defonds 2013-12-06
  • 打赏
  • 举报
回复
楼主用 JProbe 去跟一下吧。
长笛党希望 2013-12-05
  • 打赏
  • 举报
回复
1.一般spring的bean默认配置都是单例的。 销毁的方法 <bean id="..." class="..." destroy-method="..."></bean> 很常见的如dateSource的建立。 2.session 太多,占服务器内存,易丢失,维护困难。 3.数据拥塞,数据流,文件流不释放等也可能引起web运行不顺畅。。
Defonds 2013-12-05
  • 打赏
  • 举报
回复
session 中最好不要存放大量数据,并发小没大问题,并发一上去就不好说了。 运行时间越久,创建的对象越多,但并非所有对象都是有用的,然而由于你管理不当,垃圾回收没法将这些对象回收,日积月累,最终导致内存溢出。这就是 Java 中的内存泄漏。 从你的描述看来,程序不是在高并发时内存不足,而是在长时间运行后发生,这种内存泄漏基本排除 session 造成的可能。检查你的那些静态变量和 singleton 对象,他们的嫌疑最大。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧