当前位置: 首页 > 知识库问答 >
问题:

SLF4j记录器中的字符串是否消耗堆空间

杨飞
2023-03-14

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

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

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

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

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

例如,用于logger.info(“我的日志”);

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

共有1个答案

凌照
2023-03-14

JVM有一个用于常量字符串的特殊内存分配:Java字符串池。有关详细信息,请参见https://www.baeldung.com/java-string-pool。

在您的示例中,如果有一个100logger.info(“...”)语句使用相同的字符串,那么它将只在内存中存储一次。

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

 类似资料:
  • 问题内容: 我在python应用程序中使用标准的python日志记录模块: 问题是,尽管未启用调试级别,但在每次循环迭代时都会评估该愚蠢的日志消息,这会严重损害性能。 有什么解决办法吗? 在C ++中,我们提供了提供以下宏的软件包: 有效评估为 但是,由于Python(AFAIK)中没有宏,是否有一种有效的日志记录方法? 问题答案: 日志记录模块已经对您要执行的操作提供了部分支持。做这个: …代替

  • 问题内容: 是否有充分的理由不在Java String中使用\ u0000作为分隔符?我自己会编码和解码字符串。 这是为了将用户输入的(我希望输入要输入的?)字符串列表保存到Eclipse首选项并读回。该列表可能是可变大小的,所以我认为我无法将每个项目保存为自己的首选项。 问题答案: 曾经有一些库将Java字符串错误地处理为以null结尾的库。我不知道这是否仍然正确,但值得记住这些事情。尤其是当您

  • 使用代替字符串串联有什么好处吗? slf4j示例 我认为这是关于速度优化的,因为参数评估(和字符串级联)可以在运行时避免,这取决于配置文件。但只有两个参数是可能的,那么有时除了字符串串联没有其他选择。需要关于这个问题的意见。

  • 我有以下代码: 在日志中,我只能看到来自BClass而不是AClass的字段: 17:52:28.151[main]INFO Main-Main. BClass(金额=12) 但是我想查看所有BClass字段,包括父类中的字段(标题字段)。我该怎么做?

  • 我之前有一个关于相同代码的问题,但原因不同。我不想让这个问题变得太混乱。以下是参考链接:使用JOPtionPane遇到麻烦 我希望检查用户是否没有在showInputDialog中输入任何内容,或者显示一个备用消息,并将他们带回原始提示,或者只是循环通过同一个对话框,直到他们正常关闭它或通过输入一个数字继续。 下面是我试图检查空字符串的地方 末端试验段

  • 问题内容: 我有一个isNotEmpty函数,如果字符串不为空,则返回true;如果字符串为空,则返回false。我发现如果我通过它传递一个空字符串,它将无法正常工作。 使用isNotEmpty验证字符串: 如果该字符串为空,则其他字符串将不会执行,我不明白为什么,请有人对此有所帮助。 问题答案: 实际上是简单的问题。更改: 至 可以说,您可能还想将其更改为: 因为如果您传递的是数字0以及其他一些