从回收机制的定义来讲 失去引用的对象被回收那两个对象互相有对方的引用 但这两个对象 一起不被任何其他地方所使用 会不会被回收我根据定义答是不能 接着被问那一个系统中有很多这种情况 不崩溃了么当时无言以对了请高手指点迷津
解决方案 »
- JAVA加密程序
- 菜鸟问题 ,望得到解决
- 在main()中调用applet init()方法中使用 applet的getCodeBase();抛NullPointerException求解决方法!谢!
- 遇到点小问题,请大家帮下忙~~~~
- 利用 HashMap 模拟JDBC的结果集,高手来给些意见,谢谢
- 关于Pettern的问题
- 没学过JAVA所以就问个,比烂白菜还烂的问题 c = (char)((int)a ^ (int)b) 是什么意思?
- 如何处理布局管理器
- Jar 应用程序反编译成.java文件有什么办法吗?
- java中如何通过一个程序启动另外一个独立的程序
- 关于构造函数私有化
- 关于自动装箱问题。
这句话我没听懂
1,Hello hello = new Hello();
如果这个hello长时间不使用的话,系统会把它给回收的(虽然hello还指向一个对象)
2,Hello hello = new Hello();
hello = null;
这个hello已经回收了。
java从堆栈和静态存储区出发,遍历所有的引用,每当它找到一个存活对象,就会给对象一个标记。全部标记完成时,没有标记的对象将被释放.这是A,B将不能到达 也不会产生标记 所以都会被释放
但是sun只是定义了java,jre的实现各个公司有自己的东西。
我相信lz的问题,那些大公司不会没有考虑。
比方说,不是一个对象一个对象进行gc,而是一簇一簇来,一簇的对象实体(最小单位是一个),如果不再被用到的话,就以簇的单位gc掉。这个算法也不算难。
a = null;
就会释放了,因为对象会出作用域。
现在有一些现成的算法实现,一种是跟踪收集垃圾的方式,java会指定一个根对象,例如拥有main方法的类的对象的程序入口会被定义为根对象,虚拟机会从这个根对象开始追踪引用链,被追踪到的对象为可访问对象,不会被回收,不能被追踪到的对象则定义为可回收对象,将被垃圾回收掉。
当然垃圾回收机制可能更复杂,对于循环引用的若干对象,楼主其实不用担心它不会被回收掉。
数学基础是集合论,图论。楼主有兴趣有时间的话研究一下离散数学。
没时间就记一下结论好了。
现在的GC更只能点 好像可以回收这种情况....
如果a,b两对象是new对象,并且不是全局对象,会回收
如果a,b两对象是全局对象 或某一个对象是static对象,不会回收。
如果a,b两对象是new对象,并且不是全局对象,并且不被使用,会回收