java 单例模式 防止内存泄漏


当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。当new一个对象的时候,会给该对象在堆中分配一个空间。当空间不能被释放的时候,就叫内存泄漏。

 

public class Test {

private static Test test;

private ApplicationContext context;

private Test(ApplicationContext context) {
this.context = context;
}

public Test getInstance(ApplicationContext context) {
if (test == null) {
test = new Test(context);
}
return test;
}
}

由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。 

实用的Bean工厂ApplicationContext,ApplicationContext的中文意思是“应用前后关系”,它继承自BeanFactory接口;

ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态

这里不管传入什么Context最终将使用Application的Context(即可以随意传入context)

理论:将单例的生命周期和Application的周期绑定,就防止了内存泄漏。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM