zoukankan      html  css  js  c++  java
  • java清理对象的时候“=null”与“gc”的比较

    今天的话题是在清理对象的时候是使用=null还是gc,我们下面做出比较。


    1.写这篇文章的缘由

    之前我写了一篇文章是对象的清理(点击跳转),有一位网友给了另外一种方法,因此我特意使用visual vm来测试一下看看。



    2.使用检测工具 visual vm

    下载地址:https://java.net/projects/visualvm/downloads/download/release138/visualvm_138.zip

    使用参考文章:

    使用 VisualVM 进行性能分析及调优


    3.测试用例

    下面是使用gc来清理:

    package com.ray.ch05;
    
    public class Test {
    	public static void main(String[] args) throws InterruptedException {
    		Thread.sleep(15000);
    		System.out.println("begin time:" + DateUtil.getNow());
    		for (long i = 0; i < 1999999999; i++) {
    			Test test = new Test();
    			// test = null;
    			System.gc();
    		}
    		System.out.println("end time:" + DateUtil.getNow());
    	}
    }
    




    从上面两个图可以看见,使用gc的时候test所使用的内存比较少,形成的实例非常少,但是由于经常gc,因此cup占用非常高,而且不稳定,还有gc的时间非常长,上面的数据是没有完成所有gc的数据,但是也能说明一些问题。


    下面我们来使用=null来清理对象:

    代码

    package com.ray.ch05;
    
    public class Test {
    	public static void main(String[] args) throws InterruptedException {
    		Thread.sleep(15000);
    		System.out.println("begin time:" + DateUtil.getNow());
    		for (long i = 0; i < 1999999999; i++) {
    			Test test = new Test();
    			test = null;
    			// System.gc();
    		}
    		System.out.println("end time:" + DateUtil.getNow());
    	}
    }
    





    从上图可以看见,当使用=null来清空对象的时候,cup占用也高,但是比较平稳,内存的使用比gc要高大概25%,生成大量的实例,但是有一个比较明显的优势,就是执行时间短,据笔者观察,当Test的实例到达某个数量的时候,它就会突然下降,个人推测那个时候执行了gc,只是推测,没有实际根据。


    总结:其实使用=null的方式并不是真的清空对象,对象只是被回收,需要等到某一个时间才清理,而gc就直接是清理,但是,使用=null的执行速度快,使用gc的执行速度慢。

    以上只是笔者粗略的观察,有问题请指出,谢谢。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    [SHOI2015]零件组装机
    [AH2017/HNOI2017]影魔
    空指针RE第一次公开赛-笔记
    i春秋2020新春公益赛WP
    博客园Markdown编辑器修改代码配色、添加代码行号
    buuctf Writeup
    关于Tarjan的一些问题
    NOIP2013D1T3货车运输 (生成树+树链剖分)
    1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)
    CodeForces 438D The Child and Sequence (线段树 暴力)
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4944465.html
Copyright © 2011-2022 走看看