zoukankan      html  css  js  c++  java
  • 关于Java中System.gc() 与System.runFinalization()

    System.gc  :

    告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的。只是建议进行回收

    System.runFinalization():

    网上搜了一下很多人都说强制调用已经失去引用的对象的finalize方法。但是我用下边的程序测试了一下

    class Chair{
    	public int i;
    	public static int created = 0;
    	public Chair() {
    		i = ++created;
    	}
    	@Override
    	protected void finalize() throws Throwable {
    		System.out.println("第" + i +"个Chair调用finalize方法");
    	}
    }
    public class Garbage{
    	public static void main(String[] args) {
    		for (int i = 0; i < 47; ++i) {
    			new Chair();
    			//System.out.println("runfinalize");
    			System.runFinalization();  
    			//System.gc();
    		}
    	}
    }
    

      

    显然我们每次new出来的Chair都已经都已经没有引用了,但是调用System.runFinalization();这些没有引用的对象还是不调用finalize这个函数,很奇怪,然后就已知搜,然后看到的仍让是很多说的强制执行。

    后来看了一下JDK里面的说明:

     Calling this method suggests that the Java Virtual Machine expend
         * effort toward running the <code>finalize</code> methods of objects
         * that have been found to be discarded but whose <code>finalize</code>
         * methods have not yet been run. When control returns from the
         * method call, the Java Virtual Machine has made a best effort to
    
    注意是suggest that  同gc一样都是建议JVM。  所以JVM可以选择执行或者不执行
    

      

  • 相关阅读:
    KindEditor自动过滤首行缩进和全角空格的解决方法
    网站流量、连接数等监控
    VSFTP的使用
    CentOs 设置静态IP
    MySQL 5.7版本sql_mode=only_full_group_by问题
    使用密钥登录CentOS系统(基于密钥的认证)
    FIRMWARE BUG – THE BIOS HAS CORRUPTED HW-PMU RESOURCES
    Ubuntu上的MySQL可以远程访问
    自动生成单据编号
    SQL Server 重置SA密码语句
  • 原文地址:https://www.cnblogs.com/E-star/p/3423811.html
Copyright © 2011-2022 走看看