zoukankan      html  css  js  c++  java
  • Java垃圾回收System.gc()的理解

    System.gc()无法保证GC一定执行

    • 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。
    • JVM实现者可以通过system.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。
    • 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保证马上触发GC)。

    在一些特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc()。以下示例代码:

    System.runFinalization();//强制调用 失去引用的对象的finalize()方法

    public class SystemGCTest {
        public static void main(String[] args) {
            new SystemGCTest();
            System.gc();//提醒jvm的垃圾回收器执行gc,但是不确定是否马上执行gc
            //与Runtime.getRuntime().gc();的作用一样。
            System.runFinalization();//强制调用 失去引用的对象的finalize()方法
        }
    
        @Override
        protected void finalize() throws Throwable {
            super.finalize();
            System.out.println("SystemGCTest 重写了finalize()");
        }
    }

    如果注掉System.runFinalization(); 那么控制台不保证一定打印,

    从而证明了System.gc()无法保证GC一定执行.

     

  • 相关阅读:
    Nginx+Lua系列:Nginx api for lua
    Twemproxy 代理Redis集群
    Nginx+Lua系列:安装配置Nginx+Lua环境
    Nginx配置http2
    双杀 0day 漏洞(CVE-2018-8174)复现
    Restful 和 Rpc
    合作共赢
    package.json 配置发布到私有仓库
    Ant-design-vue form 表单错误提示在 输入框为 large 时 会撑开 排版样式
    献血 组织
  • 原文地址:https://www.cnblogs.com/yanl55555/p/13361597.html
Copyright © 2011-2022 走看看