到底应该等待垃圾回收还是手动释放?
例如SqlDataReader、StringBuilder这些~用完后需要dr.Dispose()和sb.remove(0,sb.lenght)这些释放操作?
以前我一般都是用完就等待垃圾回收机制回收(肯定先关闭的~dr.close())~现在尝试全部手动释放而不等待垃圾回收~却发现执行效率比以前更慢了~
请问为什么手动释放会更慢?难道是我代码的问题?
[解决办法]
据我所知,就算是你手动执行了释放操作,但是真正的内存释放还是要等到jvm的垃圾回收时才会执行。至于程序效率变低的问题,还得看你的程序是怎样的。并且,垃圾回收算法是经过优化了的,她的执行效率会是比你手动的要高。如果你是一般的程序的话,建议你还是不要手动释放。但是对于那些内存存在限制的情况,应该可以通过配置与虚拟机来解决。
[解决办法]
jvm的垃圾回收其实并不简单,它涉及到垃圾回收时间的选择,以及回收策略,合并内存碎片。不同的版本的jvm采用的垃圾回收方法并不相同,也都各有侧重。例如实时系统就会侧重保证用户程序的实时性,而一般的会更多的侧重于执行效率。建议看看jvm规范。
效率降低的话,不知道你的效率是如何测出来的。