temp和outer在虚拟机里是两个对象,只是temp中有一个field指向outer,因此temp被置为null后,temp可以被回收,但outer仍然存在,因为有forlong指向outer
解决方案 »
- 有关线程执行的顺序
- 关于CSV文件读写的程序
- 请教前辈一IO问题!!!!!!!
- 为何java2不用设定classpath路径,也能找到类库中的类的.class文件,并能运行程序?
- 这个程序 为什么老是运行就是没有结果!!
- 什么情况下"AA"equals("BB")结果为true?
- 各位大侠帮我把这段代码调一下,并把调试通过的代码帖出来!谢谢了,解决了立即给分,在线等!!~~~~~~~
- 关于String的一个简单问题,希望高手给予指点!
- 谁我告诉几本JAVA入门电子书!能下载就送分哟!
- 哪里可以下载或查看到有关java安全架构方面的文章?
- 请问java.util.ResourceBundle的作用和用法,怎么取一个.conf文件的key的值.
- 遇到一个误差积累的问题!有没好的解决方法?
还有分配内存的时候,是不是尽量让temp对象和outer对象处于连续的空间中呢?
还希望大家都来讨论一下虚拟机在内存处理上的一些问题.
public String outer=new String("testouter");
private String inner=new String("testinner");
public void finalize(){
System.out.println("finalize");
}
}class TestCollect{
public static void main(String[] args){
Collect temp=new Collect();
String forlong=temp.outer;
temp=null;
System.gc();
}
}
上面的片断可以说明temp引用被置空后就可以被回收,
不管有没有对其内部对象有没有引用都是这样的,
http://dev.csdn.net/develop/article/60/60811.shtm
可以看看这篇文章,说的很清楚。
实际上一个原则就是尽量早的在对象无用的时候置为null,以便gc可以在最近的一次处理把垃圾回收。