gpt4 book ai didi

java - 重用 StringBuffer

转载 作者:行者123 更新时间:2023-11-30 06:30:48 29 4
gpt4 key购买 nike

我知道 concat、StringBuffer 和 StringBuilder 之间的区别。我知道 StringBuffer.toString 支持数组的内存问题可能会导致内存爆炸。我什至知道 JDK Sun 优化包括为初始容量分配 2 的幂。

但我仍然想知道重用 StringBuffer(在 toString() 中使用)的最佳方法,或者重用 StringBuffer 是否合适。考虑到内存和速度性能,哪一个更好?

public String toString2() {
StringBuffer sb = new StringBuffer(<size>)
... several .append(stuff) ...
sb.trimToSize()
return sb.toString()
}

private StringBuffer sb = new StringBuffer(<size>) 
public String toString2() {
sb.delete()
sb.setLength(1024)
sb.trimToSize()
... several .append(stuff) ...
return sb.toString()
}

为什么?

最佳答案

我会说第一个示例绝对更清晰、更易于阅读且更安全——这应该几乎总是胜过性能微优化问题。 如果您确实遇到性能问题,并且您可以证明(通过具体测量)它是由这段代码引起的,并且您还可以通过测量证明,在您的本地环境中,第二个示例明显更快,然后 - 只有这样 - 您才有充分的理由使用它。

否则,您的问题没有通用的答案。如果人们声称第二个示例平均快了 n%,如果它对您的机器没有任何影响(无论是因为不同的环境,还是因为实际一段代码在您的应用中很少被调用)?

然而,我个人的直觉是,在现代 JVM 上(阅读:至少在 JDK6 上,但可能已经在 J​​DK5 上),第一个示例实际上可能更快,因为聪明的 GC 技巧使短-住的 object 极其便宜。特别是如果您使用 StringBuilder 而不是 StringBuffer,它没有同步开销。

关于java - 重用 StringBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10171223/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com