Java中不使用的对象为什么要手动设置为null

public class GCSetNullTest {
public static void main(String[] args) {
{
byte[] placeholder = new byte[64 * 1024 * 1024];//64m空间
}
//加入这一行,才会回收64m内存。因为局部变量表的变量槽有复用的特性
int i = 0;//不加这行的话,GC Root一部分的变量表仍存存有对placeholder的关联
System.gc();
}

}



如果遇到一个方法,其后面的代码有一些耗时很长的操作,而前面又定义了占用了大量内存、实际上已经不再使用的变量,手动将其设置为null值(用来替代那句 int i =0 ;把变量的局部变量表slot清空)便不见得是一个绝对无意义的操作,这种操作可以作为一种在极特殊情形(对象占用内存大、此方法的栈帧长时间不能被回收、方法调用次数达不到JIT的编译条件)下的“奇技”来使用。

摘自 深入理解Java虚拟机 241页

猜你喜欢

转载自blog.csdn.net/jiao_zg/article/details/79628780