0

我已经通过 SO 搜索了一段时间,我所能找到的只是对字符串速度的引用以及一两次相当误导的内存基准测试尝试。

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

我已经牢牢掌握了测量每个这些所花费的时间,并且有很多这样的帖子。

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

例子:

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

2 回答 2

1

由于String.format()它支持格式序列和数据类型(%s、%d 等),因此要复杂得多,因此预计性能和内存成本会更高。但是我相信这可能只对很长的字符串很重要。

于 2013-04-03T18:58:33.437 回答
0

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

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

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

希望这可以帮助。

于 2013-04-03T19:07:56.223 回答