这是下午的一个面试题,
垃圾回收,一个全局变量在 局部方法中置为Null,
当该方法return 时
局部方法中 的局部变量 和该 全局变量 哪个先被回收?为什么?
我说不一定,因为全局变量 置为 null 时,只是程序员通知 系统 该内存可以回收,不是必然要回收。
而当该方法 退出方法体是 局部变量 就被回收了。
ps:大家说说吧,我觉得这一题的回答,面试官似乎不满意,以前真没考虑过
6 个解决方案
#1
个人感觉应该先回收局部变量再回收全局变量。我的理解是不管全局变量是不是null,都应该在被实例化的实体类释放时跟着释放。如果因为值为null就回收,那么如果我写的变量为a=null,这样定义岂不是还没用就直接给回收了?
#2
应该是java的垃圾回收期调用时自动回收吧,手动的置为空,能使回收器回收得更快。
#3
变量是放在栈
垃圾回收机制只会回收堆内存中的对象
垃圾回收机制只会回收堆内存中的对象
#4
这个问题不一定的吧
我对垃圾回收的理解是这样的:当一个对象没有被任何东西引用的时候,它有可能被回收
这个跟全局变量、局部变量没关系的吧
我对垃圾回收的理解是这样的:当一个对象没有被任何东西引用的时候,它有可能被回收
这个跟全局变量、局部变量没关系的吧
#5
我和二楼一样的理解 不知道对不 当你设置为null 只是显示的告诉系统 此变量暂时不会被使用了 JVM的垃圾回收机制 会在一段时间内对其判断 然后进行回收..
不知道我说的对不 不对的请大家指出来
#6
根本无法确定会不会回收
更无法确定谁先被回收
这完全依赖垃圾收集算法
如果你说a先回收b后回收,那一定可以实现一个jvm,让它先回收b后回收a,甚至实现一个jvm,压根就不实现垃圾回收部分,只是在内存不足的时候抛出outofmemonyerror
更无法确定谁先被回收
这完全依赖垃圾收集算法
如果你说a先回收b后回收,那一定可以实现一个jvm,让它先回收b后回收a,甚至实现一个jvm,压根就不实现垃圾回收部分,只是在内存不足的时候抛出outofmemonyerror
#1
个人感觉应该先回收局部变量再回收全局变量。我的理解是不管全局变量是不是null,都应该在被实例化的实体类释放时跟着释放。如果因为值为null就回收,那么如果我写的变量为a=null,这样定义岂不是还没用就直接给回收了?
#2
应该是java的垃圾回收期调用时自动回收吧,手动的置为空,能使回收器回收得更快。
#3
变量是放在栈
垃圾回收机制只会回收堆内存中的对象
垃圾回收机制只会回收堆内存中的对象
#4
这个问题不一定的吧
我对垃圾回收的理解是这样的:当一个对象没有被任何东西引用的时候,它有可能被回收
这个跟全局变量、局部变量没关系的吧
我对垃圾回收的理解是这样的:当一个对象没有被任何东西引用的时候,它有可能被回收
这个跟全局变量、局部变量没关系的吧
#5
我和二楼一样的理解 不知道对不 当你设置为null 只是显示的告诉系统 此变量暂时不会被使用了 JVM的垃圾回收机制 会在一段时间内对其判断 然后进行回收..
不知道我说的对不 不对的请大家指出来
#6
根本无法确定会不会回收
更无法确定谁先被回收
这完全依赖垃圾收集算法
如果你说a先回收b后回收,那一定可以实现一个jvm,让它先回收b后回收a,甚至实现一个jvm,压根就不实现垃圾回收部分,只是在内存不足的时候抛出outofmemonyerror
更无法确定谁先被回收
这完全依赖垃圾收集算法
如果你说a先回收b后回收,那一定可以实现一个jvm,让它先回收b后回收a,甚至实现一个jvm,压根就不实现垃圾回收部分,只是在内存不足的时候抛出outofmemonyerror