扎实的java功底系列(Effective java)6

消除过期对象的引用

说实话,Effective java看起来还是挺难的,看到第六条、第七条的时候头脑就有点昏啊,有点不知所云的感觉,特别是第七条(不能在finally里面释放资源?finally不是一定会执行的吗?),好了废话不多说,开始第六条:

java中什么时候会产生过期对象呢?

为了这个我首先复习了一下java虚拟机的内存方面的知识,直接上三张图,其他网上盗的:

局部变量放在堆栈中,包括方法参数、对象的引用、中间计算的结果。

堆内存放对象,包括数组。GC对堆内的对象回收,在对象的引用变量生命周期结束的时候进行回收。

全局数据区存放static类型的数据,全局数据区是所有对象共享的数据。

全局代码区存放方法的定义。

言归正传,用数组实现一个栈的时候,栈先增长后减少,数据出栈的时候jvm堆栈中的引用并没有被消除,那么这个对象就是过期的。如何解决呢,一般把这个引用置为null,称之为清空对象。

比如说你的数组里面的元素,有些你不需要了,你可以这样做:

package serviceprovider;


public class Car {
    public static void main(String[] args) {
        String[] arr = new String[4]; 
        arr[0] = "123";
        arr[2] = "234";
        /**
         * 在这里你把arr[2]使用完成,要释放。
         */
        
        arr[2] = null;
        for(String i:arr){
            System.out.println(i);
        }
    }
    
}
posted @ 2015-07-12 16:51  loutao  阅读(185)  评论(0)    收藏  举报