【问题标题】:When are string literals allocated [duplicate]何时分配字符串文字[重复]
【发布时间】:2017-08-31 08:26:18
【问题描述】:

字符串字面量何时分配并放入字符串池?具体来说,如果任何代码路径都无法访问字符串文字,那么它会被分配吗?

假设您有以下代码片段:

    if(logger.isLoggable(Level.FINEST)){
        logger.log(Level.FINEST, "literal");
    }

如果 FINEST 不是并且从来不是可记录级别,是否会分配“literal”?

【问题讨论】:

  • 发帖前请search throughly。对于 JVM 如何加载和处理字符串字面量,有 very 的完整答案的问题。
  • @T.J.Crowder 过去 3 个小时我一直在寻找,但我没有找到问题的答案。如果知道,请将其链接到问题。
  • @ZiMtyth 谢谢,但这并不能回答我的问题,因为它讨论了包含文字的代码始终可访问的情况,因此它们将始终被放入池中。但是如果包含文字的代码永远无法访问会发生什么?
  • @SvetlinZarev 缺少指向规范的链接!= 意见。

标签: java string-literals


【解决方案1】:

来自JVM spec

类或接口的运行时常量池是在 Java 虚拟机创建类或接口时(第 5.3 节)构建的。

所以使用它的代码的可达性与它无关。

【讨论】:

  • 谢谢!这正是我想要的。
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 2010-12-30
  • 2021-10-29
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多