今天在看AQS的源码时看到了这段代码,有个注释,写了help GC,联想到实习的时候,组内有同学将使用完的对象也置为了null,到底这个置为null就不需要GC了吗,其实和C/C++ 的free不一样,你置为了null可以在短时间内进行gc,并不是不需要gc就释放了。
你有一个方法很长,里面定义了一个map对象,这个对象内存占用很大,如果该方法没有结束,那么这个map是无法进行回收的,此时如果想要在方法没有返回前回收这个没有用的map,就可以将map置为null来提前进行gc。
java.util.concurrent.locks.AbstractQueuedSynchronizer#acquireQueued
还有就是finalize方法,该方法无论在何时都不要重写!!!该方法会在jvm进行gc时调用,并且只会调用一次,因此当对象没有引用的时候可能并不会进行回收,原因就是你重写了finalize方法,在里面让该对象起死回生了。