1. 程式人生 > >Java的內存回收機制詳解

Java的內存回收機制詳解

out 結果 int destroy pan 得出 ida public toc

http://blog.csdn.net/mengern/article/details/38150431

Java中提供了垃圾強制回收機制的方法System.gc(),但是系統並不保證會立即進行垃圾回收,而是JVM根據定義的一套垃圾回收算法來確定,算法用來提高垃圾回收的效率。

判斷一個存儲單元是否是垃圾的依據是:該存儲單元所對應的對象是否仍被程序所用,即是否有引用指向該對象。Java的垃圾回收器自動掃描對象的動態內存區,對所引用的對象加標記,然後把沒有引用的對象作為垃圾收集起來並釋放出去。

Java沒有提供析構方法,但提供了一個類似的方法:protected void finalize();

程序說明:

[java] view plain copy
  1. class J_Book {
  2. private String name;
  3. J_Book(String name) {
  4. this.name = name;
  5. }
  6. // 覆蓋默認的finalize方法
  7. protected void finalize() {
  8. System.out.println("Book,\"" + name + "\",is destroyed!");
  9. }
  10. }
  11. public class J_Finalize {
  12. public static void main(String[] args) {
  13. J_Book book1 = new J_Book("Gone with wind");
  14. // 匿名的實例,被Java判定為垃圾內存,會被當做垃圾回收
  15. new J_Book("Java How to Program");
  16. new J_Book("Roman Holiday");
  17. book1 = new J_Book("Thingking in Java");
  18. // 強制垃圾回收,註意編譯系統不會立刻垃圾回收,由自己的算法來決定何時執行垃圾回收
  19. System.gc();
  20. }
  21. }

程序運行結果:

Book,"Roman Holiday",isdestroyed!

Book,"Java How toProgram",is destroyed!

Book,"Gonewith wind",is destroyed!

說明:上述結果是eclipse在調試模式下得出的!

Java的內存回收機制詳解