首先給出Runtime.gc()方法在API說明文檔中的介紹:
運行垃圾回收器。調用此方法意味着 Java 虛擬機做了一些努力來回收未用對象,以便能夠快速地重用這些對象當前占用的內存。當控制從方法調用中返回時,虛擬機已經盡最大努力回收了所有丟棄的對象。
名稱 gc 代表“垃圾回收器”。虛擬機根據需要在單獨的線程中自動執行回收過程,甚至不用顯式調用 gc 方法。
方法 System.gc() 是調用此方法的一種傳統而便捷的方式。
看到這大家就明白了,其實System.gc()就是通過調用Runtime.gc()來完成的。
如果非要找出點區別的話,那還得再看看System.gc() 在文檔中的說明部分,如下:
運行垃圾回收器。
調用 gc 方法暗示着 Java 虛擬機做了一些努力來回收未用對象,以便能夠快速地重用這些對象當前占用的內存。當控制權從方法調用中返回時,虛擬機已經盡最大努力從所有丟棄的對象中回收了空間。
調用 System.gc() 實際上等效於調用:
Runtime.getRuntime().gc()
另請參見:
Runtime.gc()
如果仔細對比,就會發現System.gc()是個靜態方法,也就是說調用System.gc()方法,可以直接調用。而通過Runtime.gc()方法調用時,必須先通過getRuntime方法來得到Runtime實例,然后再調用gc方法,由此可見API說明文檔中“方法 System.gc() 是調用此方法的一種傳統而便捷的方式 ”的說法還是很准確的”。
參考博客: