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