淺談對Java中GC回收機制的理解

在當前的Java虛擬機中使用引用計數法來進行對象管理幾乎已經看不到了,若是是在學Java垃圾回收的話,把基本的GC回收機制學會就能夠了。由於垃圾回收機制,屬於內存管理的範疇。在上一次回答中,筆者對Java中堆與棧的理解進行了討論,而垃圾回收的最終效果是爲了增長對的可用性,將堆中多餘的對象刪除。finalize()方法在垃圾回收機制中佔有重要的做用。在學的過程當中需格外注意。程序員

初始化對程序員來講是常常遇到的事情,但經常會忘記一樣也重要的清理工做,下面介紹下Java中垃圾回收機制和其中finalize()方法的用途何在?Java垃圾回收本質上能夠說是Java自動內存管理。垃圾回收的目的是爲程序保持儘量多的可用堆。虛擬機會刪除再也不須要從堆引用的對象。
Java的垃圾回收是由JVM自動進行,不是程序員能夠控制的。
關於回收有幾個方法:System.gc(); Sysytem.getRuntime().gc();但調用這兩個方法並不能馬上進行垃圾回收。
GC回收的過程在 Java的存在週期是自動的,不須要分配和釋放內存,同時也避免了內存泄漏。能夠調用 System.gc()方法建議 JVM 執行垃圾收集以使得可被釋放的內存能當即被使用,當此方法返回的時候,JVM 已經作了最大的努力從被丟棄的對象上回收內存空間。尚學堂•百戰程序員提示:調用 System.gc()方法不能保證 JVM 當即進行垃圾收集,只是施加一個影響,由於垃圾收集線程的優先級很低(一般是最低的)。JVM 垃圾收集器收集一個對象以前,通常要求程序調用適當的方法釋放資源,但在沒有明確釋放資 源的狀況下,Java 提供了缺省機制來終止化該對象心釋放資源,這個方法就是 finalize( )。
垃圾回收一般有兩種狀況:1.堆可用內存不足;2.CPU空閒。那麼垃圾回收的最佳作法就是用編程的方式,咱們能夠手動讓JVM經過調用System.gc()方法來運行垃圾回收。在內存佔滿時,且堆上沒有對象可用於垃圾回收時,JVM可能會拋出OutOfMemoryException。對象在被垃圾回收從堆上刪除以前,會運行finalize()方法。不建議用finalize()方法寫任何代碼。編程

finalize()方法通常有什麼用途呢?GC回收器只知道釋放那些經new分配的內存,因此它不知道該如何釋放該對象的這塊"特殊"內存,針對這一狀況,Java容許在類中定義一個名爲finalize()的方法,其工做原理爲:一旦垃圾回收器準備好釋放對象佔用的存儲空間,將首先調用finalize()方法,而且在下一次垃圾回收動做發生時,纔會真正回收對象佔用的內存。因此要是你打算用finalize(),就能在垃圾回收時刻作一些重要的清理工做。線程

相關文章
相關標籤/搜索