關於Object=null

jvm系列java

有些狀況下,object = null是能夠輔助GC的。好比:

public static void reuseSlot2(){
        MemoryLeakDemo.printMemoryInfo("before");
        {
            byte[] data = new byte[6*1024*1024];
            //或者經過set null,主動回收
            //賦null值在JIT編譯以後會被消除掉,這個時候將變量設置爲null是沒有意義的
            //實際上JIT編譯成本地代碼後,gc能夠正常回收掉,無需多餘操做
            data = null;
        }
        MemoryLeakDemo.printMemoryInfo("after assign 6M,before gc");
        System.gc();
        MemoryLeakDemo.printMemoryInfo("after gc");
    }

賦null值在JIT編譯以後會被消除掉,這個時候將變量設置爲null是沒有意義的,實際上JIT編譯成本地代碼後,gc能夠正常回收掉,無需多餘操做。

另外,當方法結束後,脫離做用域以後,相應的局部變量引用會自動被註銷掉。

小結:當遇到局部代碼段中已經申請許多佔用空間的對象,這些對象在其做用域內的後續代碼中還須要執行相對較長的時間,而且這塊內存的確在後面就不會再使用了的時候,能夠手工將一些大對象的引用設置爲null,這樣一來,GC很快就會認爲它是垃圾。一般,在這種狀況下將對象的引用設置爲null纔會對JVM有好處。若是代碼跑的很快,對象能夠很快脫離做用域,在這樣的場景下將引用設置爲null是沒有必要的,那樣只會讓代碼很難看。

相關文章
相關標籤/搜索