方法结尾设置null的做法
等待雨季的到来
2014-05-13
Hi 各位大大
小弟请教下在一个方法的结尾处,对此方法产生的局部变量设置null的动作是不是真的能起到帮助GC的作用?如果有,是如何起到作用的,作用有多大呢? |
|
near_sun
2014-05-14
实际中我们没那么做,因为工作量很大,按Java语言规范和JVM内存规范,我使用的变量生命周期在我预计的范围内(方法里的局部变量在方法结束时就到生命结束。全局变量是需要特殊照顾下,保证能释放,有可能需要显式null),我的义务就尽到。
|
|
RednaxelaFX
2014-05-14
在方法结尾处对引用类型的局部变量清null完全没意义,至少对HotSpot VM来说没意义。对GC没帮助但也不算有损害。对代码可读性来说损害颇大。
在某些大方法中间对局部变量清null还可以谈得上有意义:如果一个方法在解释器里执行,局部变量的作用域不会因为优化而缩小,这个时候如果我们有些局部变量只在方法的前半用到了,而在后半没用,那在前半用完之后清null有助后半进入GC时减少无谓引用。 周志明的《深入理解Java虚拟机》第二版的第241页有讲到这个。 |
|
等待雨季的到来
2014-05-14
非常感谢R大,很清楚。我需要再温习下GC触发条件这块的知识。
|
|
奔三的小生
2014-06-10
完全没必要,代码更难阅读,因为你不知道编译器编译之后代码是啥样了,特别是现在的JVM的逃逸分析技术可以做的很好
|
|
RednaxelaFX
2014-06-10
奔三的小生 写道 完全没必要,代码更难阅读,因为你不知道编译器编译之后代码是啥样了,特别是现在的JVM的逃逸分析技术可以做的很好
对局部变量赋null是否有助GC跟逃逸分析没啥关系咯。 |
相关讨论
相关资源推荐
- ORA-01480STR 绑定值的结尾 Null字符缺失 的问题原因及解决办法
- ORA-01480: STR 绑定值的结尾 Null 字符缺失
- ora-01480 str 绑定值的结尾null字符缺失
- oracle str绑定值为,oracle plsql修改数据时ORA-01480: STR 绑定值的结尾 Null 字符缺失 的错误解决办法。...
- ORA-1480 str 的结尾NULL 字符缺失
- Java中对象为null和调用对象清除方法clear()的不同
- oracle的“ORA-01480:STR绑定值的结尾Null字符缺失”错误
- c语言Null详解,c语言NULL和0区别及NULL详解(示例代码)
- 关于oracle plsql数据库ORA-01480: STR 绑定值的结尾 Null 字符缺失 的问题解决办法。
- null在matlab中什么意思,null表示什么