首页 > 编程语言 > 详细

java清理对象的时候“=null”与“gc”的比较

时间:2015-10-28 17:22:22      阅读:263      评论:0      收藏:0      [点我收藏+]

今天的话题是在清理对象的时候是使用=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的执行速度慢。

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

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

java清理对象的时候“=null”与“gc”的比较

原文:http://blog.csdn.net/raylee2007/article/details/49468429

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!