Java中对象为null和调用对象清除方法clear()的不同

痛苦了好多天的问题,以为是自己对框架的不熟悉导致在调用某各类的参数时,出现异常现象。尝试修改了多出多处代码,终得一魂环(《斗罗大陆》中每次击败一个猛兽,魂师获得的技能)。这种感觉莫名的爽。现把自己的心得与大家分享一下。解决的方法从《Thinking in Java 》第四版第2章一切都是对象、第5章初始化与清理中获得,综合了Stack Overflow上的一些观点。


在编程的过程中,会经历这样一种情形:在方法的结尾将对象赋值为null和清空集合的操作。其实这对于垃圾回收器来说没有意义。垃圾回收器对于方法内部的变量的回收很容易执行。


1,Java中new 出来的对象,也叫对该对象的引用,JVM(Java 虚拟机)垃圾回收机制会根据其寿命决定何时回收该对象。很多时候不需要自己去清除
切记:Java中的对象被不总是被垃圾回收器回收,即

  • 对象可能不会被垃圾回收;
  • 垃圾回收并不等于“析构”(C++)中;
  • 垃圾回收只与内存有关。

2,在多线程中,尽量将类的全局变量转换为为局部变量,或者在方法和循环内部定义,再者取决于变量作用域,垃圾回收器更容易决定其是否应该被回收。

3,将对象的值赋值为null,相当于把对象的引用清除掉,即把引用对象的指针kill掉,再使用集合就会报空指针异常调用集合的clear()方法,是把集合内部的对象都清空,而集合的引用还存在

4,将集合作为参数传递到方法中,相当于把集合的引用传递到方法中,在方法中执行任何和集合相关的清除操作,相当于对集合执行清除操作。【上述解决方法解决不了问题,尝试此方法】

你可能感兴趣的:(Java学习)