什么时候分配字符串文字

When are string literals allocated

什么时候分配字符串文字并将其放入字符串池?具体来说,如果任何代码路径都无法访问字符串文字,它是否会被分配?

假设您有以下代码片段:

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

如果 FINEST 不是也从未成为可记录级别,是否会分配 "literal"?

来自JVM spec

The run-time constant pool for a class or interface is constructed when the class or interface is created (§5.3) by the Java Virtual Machine.

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