垃圾回收的目的是識別並且丟棄不再使用的對象來釋放和重用資源.
如果對象的引用被置為null,垃圾收集器不會立即釋放對象占用的內存.
什麼時候進行垃圾回收,主要取決於JVM.可以參考 http://www.cnblogs.com/lrh-xl/p/5292495.html
這兩個方法是用來提示JVM要進行垃圾回收了.但是,立即開始還是延遲開始進行垃圾回收是取決於JVM的.
這兩個方法的行為沒有什麼不同,本質上是一樣的.
垃圾回收器決定回收某對象時,就會運行該對象的finalize()方法,但是在Java中,如果內存充足,那麼垃圾回收可能永遠不會進行,也就是說finalize()可能永遠不會被執行,顯然靠它做收尾工作是不可靠的.(何時會進行垃圾回收取決於JVM的類型,以及JVM采用何種垃圾回收算法,內存分配回收策略等).fianlize()方法的主要用途是回收特殊通道申請的內存.Java程序有垃圾回收器,所以一般情況下內存問題不用程序員擔心,但有一種JNI(Java Native Interface)調用non-Java程序(C/C++),finalize()的工作就是回收這部分內存.
JVM的堆是運行時數據區,所有類的實例和數組都在堆上分配內存.它在JVM啟動時被創建.對象所占的內存是由自動內存管理系統,也就是垃圾回收器回收.
堆內存是由存活和死亡的對象組成的,存活的對象是應用可以訪問的,不會被回收,死亡的對象是應用不可訪問尚且沒有被垃圾收集器回收掉的對象,一直到垃圾收集器把這些對象回收掉之前,它們會一直占據內存空間.
了解更多關於運行時數據區可以參考http://www.cnblogs.com/lrh-xl/p/5277585.html
吞吐量收集器使用並行版本的新生代垃圾收集器,它用於中等規模和大規模數據的應用程序.而串行收集器對大多數的小應用(現代處理器上需要大概100M左右的內存)就足夠了.
了解更多關於垃圾收集器可以參考http://www.cnblogs.com/lrh-xl/p/5309141.html
關於垃圾收集可以參考http://www.cnblogs.com/lrh-xl/p/5312877.html 和 http://www.cnblogs.com/lrh-xl/p/5292495.html
Java中有兩種異常:受檢查(checked)異常和不受檢查(unchecked)異常.不受檢查的異常不需要在方法或者構造函數上聲明,就算方法或者構造函數的執行可能會拋出這樣的異常,並且不受檢查的異常可以傳播到方法或者是構造函數的外面.相反,受檢查的異常必須用throws語句或者是構造函數上聲明.
Exception和Error都是Throwable的子類.Exception用於用戶程序可以捕獲的異常情況.Error定義了不期望被用戶捕獲的異常.
throw關鍵字用來在程序中明確地拋出異常,相反,throws語句用來表明方法不能處理的異常.每一個方法都必須要指定哪些異常不能處理,所以方法的調用者才能夠確保處理可能發生的異常,多個異常是用逗號分隔的.
無論是否拋出異常,finally代碼塊都會執行,它主要是用來釋放用用程序占用的資源.
finalize()方法是Object類的protected()方法,它是在對象被垃圾回收前由JAVA虛擬機來調用的.