将不使用的对象置为NULL可以加快回收吗

一直听说将不用的对象置为NULL,可以加迅被GC回收,但又听见另一种观点说置NULL不会被GC.倒底会不会加速呢,本人不太懂GC的机制,但也可以知道置NULL有没有用,写个代码测试一下就OK了.贴代码:
public class LoopObject
{
public static void main(String[] args)
{
LoopObject lo;
for (int i = 0; i < 100000; i++)
{
lo = new LoopObject();
}

}
}


javac LoopObject.java
为了公平,执行了五次运行命令,每执行一次,复制记录一下:
java -verbosegc LoopObject
结果如下:
[GC 896K->161K(5056K), 0.0013781 secs]
[GC 896K->161K(5056K), 0.0013644 secs]
[GC 896K->161K(5056K), 0.0013768 secs]
[GC 896K->161K(5056K), 0.0013536 secs]
[GC 896K->161K(5056K), 0.0013715 secs]


被置为空后的代码:
public class LoopObject
{
public static void main(String[] args)
{
LoopObject lo;
for (int i = 0; i < 100000; i++)
{
lo = new LoopObject();
lo = null;
}
}
}


javac LoopObject.java
为了公平,执行了五次运行命令,每执行一次,复制记录一下:
java -verbosegc LoopObject
结果如下:
[GC 896K->161K(5056K), 0.0013662 secs]
[GC 896K->161K(5056K), 0.0013609 secs]
[GC 896K->161K(5056K), 0.0013539 secs]
[GC 896K->161K(5056K), 0.0013664 secs]
[GC 896K->161K(5056K), 0.0014042 secs]

结果对比,用前段代码的GC回收时间减去后一段代码的回收时间:
0.0000119、0.0000035、0.0000229、-0.0000128、-0.0000327
从结果上看,感觉差不多。。。。。。可能是例子太简单的,那么再写个复杂的代码

import java.util.Hashtable;

public class LoopObject
{
public static void main(String[] args)
{
Hashtable<Object, Object> ht;
for (int i = 0; i < 100000; i++)
{
ht = new Hashtable<Object, Object>();
}
}
}

javac LoopObject.java
执行了三次运行命令,每执行一次,复制记录一下:
java -verbosegc LoopObject
结果如下:
[GC 896K->161K(5056K), 0.0013631 secs]
[GC 1057K->161K(5056K), 0.0004871 secs]
[GC 1057K->161K(5056K), 0.0002996 secs]
[GC 1057K->161K(5056K), 0.0001650 secs]
[GC 1057K->161K(5056K), 0.0001509 secs]
[GC 1057K->161K(5056K), 0.0001557 secs]
[GC 1057K->161K(5056K), 0.0001597 secs]
[GC 1057K->161K(5056K), 0.0001625 secs]
[GC 1057K->161K(5056K), 0.0002215 secs]
[color=green][GC 1057K->161K(5056K), 0.0001568 secs][/color]

[GC 896K->161K(5056K), 0.0013520 secs]
[GC 1057K->161K(5056K), 0.0005030 secs]
[GC 1057K->161K(5056K), 0.0003084 secs]
[GC 1057K->161K(5056K), 0.0001522 secs]
[GC 1057K->161K(5056K), 0.0001523 secs]
[GC 1057K->161K(5056K), 0.0001546 secs]
[GC 1057K->161K(5056K), 0.0001626 secs]
[GC 1057K->161K(5056K), 0.0001473 secs]
[GC 1057K->161K(5056K), 0.0002252 secs]
[color=blue][GC 1057K->161K(5056K), 0.0001502 secs][/color]

[GC 896K->161K(5056K), 0.0013446 secs]
[GC 1057K->161K(5056K), 0.0004839 secs]
[GC 1057K->161K(5056K), 0.0003243 secs]
[GC 1057K->161K(5056K), 0.0001527 secs]
[GC 1057K->161K(5056K), 0.0001585 secs]
[GC 1057K->161K(5056K), 0.0001537 secs]
[GC 1057K->161K(5056K), 0.0001669 secs]
[GC 1057K->161K(5056K), 0.0002167 secs]
[GC 1057K->161K(5056K), 0.0001568 secs]
[color=red][GC 1057K->161K(5056K), 0.0001760 secs][/color]


import java.util.Hashtable;

public class LoopObject
{
public static void main(String[] args)
{
Hashtable<Object, Object> ht;
for (int i = 0; i < 100000; i++)
{
ht = new Hashtable<Object, Object>();
ht = null;
}
}
}

重新编译后并执行
javac LoopObject.java
执行了三次运行命令,每执行一次,复制记录一下:
java -verbosegc LoopObject

[GC 896K->161K(5056K), 0.0013605 secs]
[GC 1057K->161K(5056K), 0.0004848 secs]
[GC 1057K->161K(5056K), 0.0003503 secs]
[GC 1057K->161K(5056K), 0.0001571 secs]
[GC 1057K->161K(5056K), 0.0001541 secs]
[GC 1057K->161K(5056K), 0.0001685 secs]
[GC 1057K->161K(5056K), 0.0001570 secs]
[GC 1057K->161K(5056K), 0.0001546 secs]
[GC 1057K->161K(5056K), 0.0001561 secs]
[color=green][GC 1057K->161K(5056K), 0.0001341 secs][/color]

[GC 896K->161K(5056K), 0.0014766 secs]
[GC 1057K->161K(5056K), 0.0004738 secs]
[GC 1057K->161K(5056K), 0.0003499 secs]
[GC 1057K->161K(5056K), 0.0001562 secs]
[GC 1057K->161K(5056K), 0.0001534 secs]
[GC 1057K->161K(5056K), 0.0001450 secs]
[GC 1057K->161K(5056K), 0.0001547 secs]
[GC 1057K->161K(5056K), 0.0001607 secs]
[GC 1057K->161K(5056K), 0.0001585 secs]
[color=blue][GC 1057K->161K(5056K), 0.0001300 secs][/color]

[GC 896K->161K(5056K), 0.0013647 secs]
[GC 1057K->161K(5056K), 0.0004726 secs]
[GC 1057K->161K(5056K), 0.0003491 secs]
[GC 1057K->161K(5056K), 0.0001531 secs]
[GC 1057K->161K(5056K), 0.0001437 secs]
[GC 1057K->161K(5056K), 0.0001537 secs]
[GC 1057K->161K(5056K), 0.0001530 secs]
[GC 1057K->161K(5056K), 0.0001282 secs]
[GC 1057K->161K(5056K), 0.0001714 secs]
[color=red][GC 1057K->161K(5056K), 0.0001593 secs][/color]

从这次的结果中不难看出,多加了一行置空的代码,还真有点效果,只是不知道这些效果对系统性能有没有什么提高呢
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值