我有一个条件,即StringBuilder会不断存储与大型平面文件(100兆字节)中的模式匹配的行。但是,达到条件后,我将StringBuilder变量的内容写入文本文件。
现在我想知道是否应该通过重置对象->使用相同的变量
stringBuilder.delete(0,stringBuilder.length())
要么
stringBuilder=new StringBuilder();
请提出就性能和OOM问题而言您认为哪个更好。
我认为StringBuilder#delete(start, end)通话仍然很昂贵,您应该这样做:
StringBuilder#delete(start, end)
stringBuilder.setLength(0);
重置它。
更新: 查看完 源代码后StringBuilder,似乎setLength(int)完整保留了旧缓冲区,最好调用: StringBuilder#trimToSize() 在上述调用which之后 attempts to reduce storage used for the character sequence 。
StringBuilder
setLength(int)
StringBuilder#trimToSize()
attempts to reduce storage used for the character sequence
所以这样的事情会更有效:
stringBuilder.setLength(0); // set length of buffer to 0 stringBuilder.trimToSize(); // trim the underlying buffer