zoukankan      html  css  js  c++  java
  • java中finalize()方法

    finalize
    垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点:

    1、当对象不再被程序所使用的时候,垃圾回收器将会将其回收
    2、垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他可以尽快回收资源(System.gc()和Runtime.getRuntime().gc())
    3、垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize()方法
    4、GC主要针对堆内存

    finalize()是Object里面的一个方法,当一个堆空间中的对象没有被栈空间变量指向的时候,这个对象会等待被java回收:jdk里面是这样实现的:

    protected void finalize() throws Throwable { }
    }

    源码中显示的@Deprecated(since="9")的意思就是说在jdk9以后这个方法就过时了(有其他的方法代替),但还是可以试验下…

     1 public class testFinalize
     2 {
     3     public static void main(String[] args){
     4     
     5         Person p = new Person();
     6         p = null;//此时堆当中的Person对象就没有变量指向了,就变成了垃圾,等到垃圾回收机制调用的finalize()的时候会输出
     7         //那句话
     8     }
     9 }
    10 
    11 class Person
    12 {
    13 
    14     protected void finalize() throws Throwable{
    15         
    16         System.out.println("我快死了!!!");
    17     }
    18 
    19 }

    测试了几次,垃圾回收机制都没有启动(这点垃圾她真的看不上)。咱们程序员也不能强制垃圾回收器启动,但是可以适当建议她启动,毕竟人家傲娇得很呢嘛,下面这代码建议她启动(增加垃圾回收器启动的概率)。

     1 public class testFinalize
     2 {
     3     public static void main(String[] args){
     4     
     5         Person p = new Person();
     6         p = null;
     7         System.gc();
     8 
     9 
    10     }
    11 }
    12 
    13 class Person
    14 {
    15 
    16     protected void finalize() throws Throwable{
    17         
    18         System.out.println("我快死了!!!");
    19     }
    20 
    21 }

    你看看,你看看,人家还是不理你,看来得拿出点正当的手段了(就好比追女孩子一样,追不到,可以采取一些正当的手段,比如买束花什么的,会加分的吧…咱程序员也懂浪漫~)。改为如下代码:

     1 public class testFinalize
     2 {
     3     public static void main(String[] args){
     4     
     5         Person p = new Person();
     6         //送点花
     7         for(int i = 0 ; i< 1000; i++){
     8            p = null;    
     9         }        
    10         System.gc();//增加垃圾回收器启动的概率
    11     }
    12 }
    13 
    14 class Person
    15 {
    16 
    17     protected void finalize() throws Throwable{
    18         
    19         System.out.println("我快死了!!!");
    20     }
    21 
    22 }

    现在就出来了…如果没出来可以把循环增加一下~

    看来还是使点手段好用啊!

    参考链接:https://blog.csdn.net/qq_37823003/article/details/107333386

  • 相关阅读:
    老杳:2017年中国集成电路产业十大新闻
    RMA退货流程解决方案
    Linux
    vue.js
    NET Core度身定制的AOP框架
    Timeline
    HTTP
    MVC 常用扩展点:过滤器、模型绑定等
    装箱拆箱
    jQuery Tree
  • 原文地址:https://www.cnblogs.com/woaiheniunai/p/15456433.html
Copyright © 2011-2022 走看看