什么是释放stringbuilder内存的最快方法.
StringBUilder sb = new StringBuilder();
sb.apppend(maximum value possible);
下面是我试图尽可能快地释放内存并使该对象符合垃圾收集条件的代码片段
方式1 –
sb = null;
根据我的理解,stringbuilder中的所有数据都将被删除,并且一旦被踢入对象就有资格进行垃圾收集,但是stringbuilder占用的文本内存将被释放.它中的字符串值也会从堆中删除或存储在字符串池中吗?
方式2 –
sb.setLength(0);
这将重置字符串生成器的长度,但不会进行垃圾回收
方式3 –
sb.delete(0,sb.length());
这将通过删除其中的所有数据来重置字符串构建器,但不会进行垃圾回收
方式4 –
sb.delete(0,sb.length());
sb = null;
这将重置字符串生成器并使其符合垃圾回收的条件
解决方法:
简单:顺其自然
sb = null;
而忘了其余的.
为什么?只要GC可以确定某个对象符合垃圾收集条件,它就会知道该对象引用的所有内容都符合条件.鉴于您无法控制GC启动和清理对象以及释放内存,因此上述分配非常合适.
因为它清楚地传达了您的意图,然后帮助GC完成其工作.实际上编写良好的代码可能甚至不需要该语句.
现在,也许这实际上还不够好.但接下来我们将讨论一个真正的性能问题,在一个非常明确和狭隘的背景下.在这种情况下,你不依赖传闻,你开始测量.
换句话说:如果您没有在设置中出现的实际性能问题,并且需要采取措施,那么您可以使用简单明了的代码,避免各种“源代码级别”优化.但是如果你有一个真正的性能问题,那么你应该相应地对待它:通过确定根本原因,并可能通过测量不同选项在现实中的运作方式.
还有其他一些过早优化的气味!
标签:java,performance
来源: https://codeday.me/bug/20190722/1499887.html