2024年4月4日发(作者:)
java释放内存的方法
除了扩大java虚拟机内存之外,我们还需要对自己的程序进行优化,
1、那就是让自己编写的程序符合垃圾回收的机制,
2、然后就是手动的调用();
下面分几点符合gc的条件。
(1) 空引用 :当对象没有对他可到达引用时,他就符合垃圾回收的条件。
也就是说如果没有对他的引用,删除对象的引用就可以达到目的,因此我们可以
把引用变量设置为 null,来符合垃圾回收的条件。
StringBuffer sb = new StringBuffer("hello");
System.
n(sb);
sb=null;
(2) 重新为引用变量赋值:可以通过设置引用变量引用另一个对象来解除该引
用变量与一个对象间的引用关系。
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("goodbye");
n(sb1);
sb1=sb2;//此时"hello"符合回收条件
(3) 方法内创建的对象:所创建的局部变量仅在该方法的作用期间内存在。
一旦该方法返回,在这个方法内创建的对象就符合垃圾收集条件。有一种明显的
例外情况,就是方法的返回对象。
public static void main(String[] args) {
Date d = getDate();
n("d = " + d);
}
private static Date getDate() {
Date d2 = new Date();
StringBuffer now = new StringBuffer(ng());
n(now);
return d2;
}
返回的是对象,而且这个对象还在以后的程序中要用,所以不会释放。
(4) 隔离引用:这种情况中,被回收的对象仍具有引用,这种情况称作隔
离岛。若存在这两个实例,他们互相引用,并且这两个对象的所有其他引用都删
除,其他任何线程无法访问这两个对象中的任意一个。也可以符合垃圾回收条件。
public class Island {
Island i;
public static void main(String[] args) {
Island i2 = new Island();
Island i3 = new Island();
Island i4 = new Island();
i2.i=i3;
i3.i=i4;
i4.i=i2;
i2=null;
i3=null;
i4=null;
}
}
发布评论