哪个使用较少的内存String.format或+ / StringBuilder?

时间:2013-04-03 18:52:05

标签: java string performance

我一直在搜索SO一段时间,而我所能找到的只是字符串的速度和一两个在内存基准测试中误导的尝试。

我的情况是我们的应用程序中有大量的日志消息,我们想知道使用String.format与+对比StringBuilder是否有任何可衡量的MEMORY优势。

我已经牢牢掌握了每一项测量时间,并且有大量的SO帖子。

谁能告诉我哪一个更适合降低内存消耗?

示例:

if(LOG.isDebugEnabled()) LOG.debug(String.format("Invoice id = %s is waiting for processing", invoice.getId()));

2 个答案:

答案 0 :(得分:1)

由于String.format()更复杂,因为它支持格式序列和数据类型(%s,%d等),因此预计性能和内存会更高。但是我相信这对于很长的琴弦来说可能很重要。

答案 1 :(得分:0)

我相信String.format会使用更少的内存。 使用StringBuilder时,需要创建一个新的构建器对象,然后将字符串附加到它。在我看来,对象的创建和对它的常量引用(通过append或类似方法)比使用String.format返回直接字符串更加占用内存。

StringBuilder在创建最终字符串之前使用临时对象。 String.format似乎是一种更直接的方式,因此内存密集度更低。 而且,StringBuilder在初始化时会询问特定的大小(否则它将默认为某个值)。 您可以比较StringBuilder对象与普通旧String对象的默认分配内存值。

您可以使用要构建的大型字符串数据集测试这两个选项,并评估每种方法所需的时间。

希望这有帮助。