日期:2014-05-18  浏览次数:20595 次

求问spring基础问题!
application  xml配置如下

<bean id="userDao" class="com.text.UserWork"></bean>


ApplicationContext applicatContext = new ClassPathXmlApplicationContext("appxxxxx.xml")

UserWork user = applicatContext.getBean("userDao");

请问这个UserWork的资源什么时候回收,如果不回收,对内在资源占用影响大吗?


------解决方案--------------------
GC回收原则是随线程而生,随线程而灭,线程结束,内存自然回收了。至于不回收也就是所谓内存泄漏,主要是长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收。
------解决方案--------------------
spring bean一般是以单例形式存在的吧

我们假设spring应用未结束前,bean已结束生命周期被回收,但是假如不禁止再次调用
applicatContext.getBean("userDao");
该bean还是会被重新创建,因为再次调用的时机不定,所以与其浪费不必要的系统资源再创建,不如不回收bean或者更灵活的方式管理,实在内存不够时就回收一些最不必要存在的bean,like floor 1 said