当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。当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的周期绑定,就防止了内存泄漏。