當一個對象已經不需要再使用本該被回收時,另外一個正在使用的對象持有它的引用從而導致它不能被回收,這導致本該被回收的對象不能被回收而停留在堆內存中,這就產生了內存泄漏。當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的周期綁定,就防止了內存泄漏。