首页 > 代码库 > Java的内存回收机制详解

Java的内存回收机制详解

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.   
  4.     J_Book(String name) {  
  5.         this.name = name;  
  6.     }  
  7.   
  8.     // 覆盖默认的finalize方法  
  9.     protected void finalize() {  
  10.         System.out.println("Book,\"" + name + "\",is destroyed!");  
  11.     }  
  12. }  
  13.   
  14. public class J_Finalize {  
  15.     public static void main(String[] args) {  
  16.         J_Book book1 = new J_Book("Gone with wind");  
  17.   
  18.         // 匿名的实例,被Java判定为垃圾内存,会被当做垃圾回收  
  19.         new J_Book("Java How to Program");  
  20.         new J_Book("Roman Holiday");  
  21.         book1 = new J_Book("Thingking in Java");  
  22.   
  23.         // 强制垃圾回收,注意编译系统不会立刻垃圾回收,由自己的算法来决定何时执行垃圾回收  
  24.         System.gc();  
  25.     }  
  26. }  

 

程序运行结果:

 

Book,"Roman Holiday",isdestroyed!

Book,"Java How toProgram",is destroyed!

Book,"Gonewith wind",is destroyed!

说明:上述结果是eclipse在调试模式下得出的!

Java的内存回收机制详解