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