繁体   English   中英

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

[英]Which uses less memory String.format or +/StringBuilder?

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

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

我在衡量每个项目所花费的时间方面拥有扎实的实力,为此,有很多SO职位。

谁能告诉我哪种方法可以降低内存消耗?

例:

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

由于String.format()由于支持格式序列和数据类型(%s,%d等String.format()而变得更加复杂,因此,它的性能和内存消耗将更高。 但是,我认为这可能仅对很长的字符串有意义。

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

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

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM