【问题标题】:Do Strings inside SLF4j loggers consume heap spaceSLF4j 记录器中的字符串是否消耗堆空间
【发布时间】:2021-07-07 14:52:31
【问题描述】:

我的大应用程序包含大代码的处理,其中也包括字符串文字。

作为代码清理活动的一部分,我将所有字符串文字声明为字符串最终静态常量变量。

之后,我希望我的应用程序的性能会有所改善。

我正在使用 SLF4j 进行日志记录。

我的问题是 - 日志中的字符串也应该声明为最终常量?

例如LOGGER.info("我的日志");

它是否也消耗堆内存空间?还是应该让它们保持原样?

【问题讨论】:

  • 您的字符串字面量(如"My logs")不需要制作成静态常量除非它有助于提高可读性或正确性。它们本质上已经类似于静态常量

标签: java string performance heap-memory


【解决方案1】:

JVM 对常量字符串有一个特殊的内存分配:Java 字符串池。详情请见https://www.baeldung.com/java-string-pool

在您的示例中,如果您有 100 个使用相同字符串的 LOGGER.info("...") 语句,则它只会在内存中存储一​​次。

同样在其他地方,将重复的字符串字面量转换为最终的静态常量对于内存使用不是必需的,但它可能会使其更易于维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2021-10-27
    • 2013-10-10
    • 1970-01-01
    • 2012-10-08
    • 2020-10-22
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多