Java的內存回收機制詳解
阿新 • • 發佈:2017-08-01
out 結果 int destroy pan 得出 ida public toc
[java] view plain copy
http://blog.csdn.net/mengern/article/details/38150431
Java中提供了垃圾強制回收機制的方法System.gc(),但是系統並不保證會立即進行垃圾回收,而是JVM根據定義的一套垃圾回收算法來確定,算法用來提高垃圾回收的效率。
判斷一個存儲單元是否是垃圾的依據是:該存儲單元所對應的對象是否仍被程序所用,即是否有引用指向該對象。Java的垃圾回收器自動掃描對象的動態內存區,對所引用的對象加標記,然後把沒有引用的對象作為垃圾收集起來並釋放出去。
Java沒有提供析構方法,但提供了一個類似的方法:protected void finalize();
程序說明:
- class J_Book {
- private String name;
- J_Book(String name) {
- this.name = name;
- }
- // 覆蓋默認的finalize方法
- protected void finalize() {
- System.out.println("Book,\"" + name + "\",is destroyed!");
- }
- }
- public class J_Finalize {
- public static void main(String[] args) {
- J_Book book1 = new J_Book("Gone with wind");
- // 匿名的實例,被Java判定為垃圾內存,會被當做垃圾回收
- new J_Book("Java How to Program");
- new J_Book("Roman Holiday");
- book1 = new J_Book("Thingking in Java");
- // 強制垃圾回收,註意編譯系統不會立刻垃圾回收,由自己的算法來決定何時執行垃圾回收
- System.gc();
- }
- }
程序運行結果:
Book,"Roman Holiday",isdestroyed!
Book,"Java How toProgram",is destroyed!
Book,"Gonewith wind",is destroyed!
說明:上述結果是eclipse在調試模式下得出的!
Java的內存回收機制詳解