zoukankan      html  css  js  c++  java
  • fianlize()函数讨论

      都知道java中的类都是从Object类继承过来的。而,Object类存在fianlize函数,那么该函数的作用是什么呢?

      和c++中的析构函数有点像,都是对象内存释放的时候调用。

          区别:

            1、在内存释放的时候调用finalize函数,对象可能不被垃圾回收。

            2、垃圾回收并不等于“析构”。

            3、垃圾回收只与内存有关。

         finalize函数的工作原理:在垃圾回收器(JVM中)准备好释放对象内存时,首先调用finalize函数,并且在下一次垃圾回收时才会真正回收对象内存。所以,可以在finalize函数做一些清理工作。这些必须手动添加代码实现。

         专家建议,一般不要用finalize函数来做清理工作。原因,JVM自动的调用finalize函数,程序员无法控制程序什么时候调用finalize函数。但是,java给我们提供了显示的调用System.gc()来执行finalize函数。

    以下给出发生finalize调用的情况分析:【重点】

        a、当一个对象的内存不再使用时;(需要显示的调用System.gc();)

              1、如,obj =null; 

              2、Book  book = new Book();  // 这里申请的内存块,没有引用对象,也就是不会再用到了。会发生finalize函数调用。

                            bo0k = new Book();

              3、new Book(); //  匿名对象,本次用完后,其内存块没有了引用对象,内存不再使用。会发生finalize函数调用。

       b、程序导致系统内存不够时;(不需要显示的调用System.gc();)

            如:

               for(int i =0;i<100000000;i++)

                   Book book = new Book();

    ——————————————————————————————————————————————————————————

    全文程序代码:

     1 class Tank{
     2     boolean zt = true; // true is man, false is kong.
     3     public void zh(){
     4         zt = false;
     5     }
     6     protected void finalize(){
     7         if(!zt)
     8         {    
     9             System.out.println("空的");
    10         }
    11         else {
    12             System.out.println("满的,已置空");
    13             zt = false;
    14         }
    15     }
    16 }
    17 public class Test {
    18 
    19     public static void main(String[] args){
    20 
    21         for(int i =0;i<1000000;i++) {
    22             Tank tank = new Tank();
    23         } 
    24     }
    25 }

        

  • 相关阅读:
    【HDOJ6687】Rikka with Stable Marriage(Trie树,贪心)
    【CF1244D】Paint the Tree(树形DP,树)
    【HDOJ6681】Rikka with Cake(扫描线,线段树)
    CPU亲和力
    iostat、vmstat和mpstat命令
    sar命令介绍
    Linux网络调试工具
    svn使用入门
    深入探究C/C++基本数据类型
    core文件与gdb调试
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2517889.html
Copyright © 2011-2022 走看看