您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java中怎么實現垃圾強制回收,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
一 點睛
當一個對象失去引用后,系統何時調用它的finalize()方法對它進行資源清理,何時它可以變成不可達狀態,系統何時回收它占有的內存,對于程序完全透明。程序只能控制一個對象不再被任何引用變量引用,不能控制它何時被回收。
程序可以強制系統進行垃圾回收——這種強制只是通知系統進行垃圾回收,但系統是否進行垃圾回收依然不能確定。大部分時候,程序強制垃圾回收后總是有一些效果
強制系統垃圾回收有如下兩個方法:
調用System類的gc()
靜態方法:System.gc()
調用Runtime對象的gc()
實例方法:Runtime.getRuntime().gc()
二 不強制進行垃圾回收代碼
1 代碼
public class GcTest { public static void main(String[] args) { for (int i = 0 ; i < 1; i++) { new GcTest(); } } public void finalize() { System.out.println("系統正在清理GcTest對象的資源..."); } }
2 運行
程序運行無任何結果。
3 說明
程序創建了1個匿名對象,這個對象在創建之后立即進入可恢復狀態,等待系統回收,但直到程序退出,系統依然不能回收該資源。
三 強制垃圾回收代碼
1 代碼
public class GcTest { public static void main(String[] args) { for (int i = 0 ; i < 1; i++) { new GcTest(); // 下面兩行代碼的作用完全相同,強制系統進行垃圾回收 // System.gc(); Runtime.getRuntime().gc(); } } public void finalize() { System.out.println("系統正在清理GcTest對象的資源..."); } }
2 運行
系統正在清理GcTest對象的資源...
3 說明
該打印說明強制垃圾回收起了作用。
命令行執行如下語句后,可以看到垃圾回收前、回收后的內存占用對比。
E:\Java\IDEA_Java\out\production\IDEA_Java>java -verbose:gc GcTest
[GC (System.gc()) 2621K->760K(251392K), 0.0009908 secs]
[Full GC (System.gc()) 760K->670K(251392K), 0.0040659 secs]
系統正在清理GcTest對象的資源...
運行結果顯示了程序強制垃圾回收的效果,但這種強制只是建議系統立即進行垃圾回收,系統完全有可能并不立即進行垃圾回收,垃圾回收機制也不會對程序的建議完全置之不理;垃圾回收機制會在收到通知后,盡快進行垃圾回收。
關于Java中怎么實現垃圾強制回收就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。