java中關於對象的可達可用問題
阿新 • • 發佈:2018-04-26
正常 pyw 知識 () target 內存泄露 介紹 null bject
(註:本文引用知識純粹為技術交流,未經允許不可私自轉載)
Java中其實也有內存泄露,就是因為對象無用卻可達的原因.
這個細分細分下來有三個
1. 不可用不可達------>這種情況GC會幫我們回收掉,而C++不會
2. 不可用可達 ------>這種情況會存在內存泄露
3. 可用可達 ------>正常使用
1.不可用不可達就是我們的變量作用域結束了,不可用不可達
2. 不可用可達,就是我們自己沒有將其對象,
舉個例子:
在這個例子中,我們循環申請Object對象,並將所申請的對象放入一個Vector中,如果我們僅僅釋放引用本身,那麽Vector仍然引用該對象,所以這個對象對GC來說是不可回收的。因此,如果對象加入到Vector後,還必須從Vector中刪除,最簡單的方法就是將Vector對象設置為null
Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
Object o=new Object();
v.add(o);
o=null;
}
//此時,所有的Object對象都沒有被釋放,因為變量v引用這些對象。
這時候這些Object就是不可用可達的對象,GC不會幫我們清理的, 這就存在了內存泄露了
3. 可用可達就不做介紹了
java中關於對象的可達可用問題