序言
前两天,客户现场那边有个问题,开启了文件监控,但是无法扫描。客户百思不得其解,然后我这边看了一下代码,发现了如下内容:
//释放内存,每次使用完赋予空值
detailEntity=null;
// ... do others
我看到了有一个同事的代码,迅速定位问题就在这里。它似乎想释放掉这个内存,但是后面竟然有直接引用,引发了空指针异常。但是这个对象是存在于栈中的,且栈很浅,并且栈大小没有经过一个先大后小的过程,然后对象并没有逃逸的迹象。所以这个释放纯属多余,而且即使要释放一个对象,或者一个资源,至少他是公用的,释放对象的算法十分复杂(如:Netty中的ByteBuf的释放,需要经过自旋指针计算,确定没有引用。才可以释放。)
思考
在很多时候,我们的能力或者知识储备并不充足的时候,可能原始方案就是最好的,只要能正确编写代码,Java的效率也好,内存也好。只要不自作聪明,就很难犯一些大的错误。