Pool de Cadeias vs Pool Constante

Essa pergunta pode ser boba. Mas estou completamente confuso. Precisa de ajuda para entender o pool de strings e o pool constante. Sou claro sobre internação de strings e pool de strings.

String s1 = "Hello"; String s2 = "Hello"; 

Agora ambos se referem ao mesmo object devido a internação (ie) Como strings são imutáveis, apenas um object é criado e ambos se referem ao mesmo object.

E também pool constante é algo que contém todas as constantes (integer, string, etc) que são declaradas em uma class. É específico para cada class.

  System.out.println("Hello"); //I believe this Hello is different from above. 

Minhas perguntas são,

  1. O conjunto de cadeias refere-se ao conjunto de objects de cadeia constante no conjunto constante?
  2. Em caso afirmativo, o conjunto de cadeias de caracteres é comum em todo o aplicativo ou específico para uma class?

Obrigado.

Minhas perguntas são,

  1. O conjunto de cadeias refere-se ao conjunto de objects de cadeia constante no conjunto constante?

Não.

“Conjunto Constante” refere-se a uma coleção de bytes especialmente formatada em um arquivo de class que possui significado para o carregador de classs Java. As “strings” nela são serializadas , elas não são objects Java. Existem também muitos tipos de constantes, não apenas cadeias de caracteres.

Veja o Capítulo 4.4 a tabela de sinuca constante

As instruções da Java Virtual Machine não dependem do layout em tempo de execução de classs, interfaces, instâncias de classs ou matrizes. Em vez disso, as instruções referem-se a informações simbólicas na tabela constant_pool .

Por outro lado, o “conjunto de strings” é usado no tempo de execução (não apenas durante o carregamento da class), contém apenas strings e as “strings” no pool de strings são objects java. O “conjunto de strings” é um mapa fraco seguro para threads, de instâncias java.lang.String instâncias java.lang.String usadas para sequências internas.

Capítulo 3.10.5. Literatura de cordas diz

Um literal de string é uma referência a uma instância da class String (§4.3.1, §4.3.3).

Além disso, uma string literal sempre se refere à mesma instância da class String . Isso ocorre porque literais de string – ou, mais geralmente, strings que são os valores de expressões constantes (§15.28) – são “internados” para compartilhar instâncias exclusivas, usando o método String.intern .

Existe apenas um conjunto de strings e todos os literais de strings são automaticamente internados.
Além disso, existem outros pools para autoboxing e tal.

O pool constante é onde esses literais são colocados para a class.