Czy Pool Literal String to zbiór odwołań do obiektu String lub zbioru obiektów

Jestem zdezorientowany po przeczytaniu artykułu o stronie javaranch autorstwa Coreya McGlone, autora Linii końcówek SCJP. o nazwie Strings, dosłownie i SCJP Java 6 Programmer Guide autorstwa Kathy Sierra (współzałożycielka javaranch) i Bert Bates.

Postaram się zacytować to, co pan Corey i pani Kathy Sierra cytowali na temat Pool Literal Pool.

1 Według pana Coreya McGlone:

String Literal Pool to zbiór odniesień, które wskazują na obiekty String.

String s = "Hello"; (Załóżmy, że na stosie nie ma żadnego obiektu o nazwie „Hello”), utworzy obiekt String"Hello" na stercie i umieści odwołanie do tego obiektu w puli literalnej ciągu (tabela stała)

String a = new String("Bye"); (Załóżmy, że na stosie nie ma obiektu „Bye”,new operator zobowiąże JVM do utworzenia obiektu na stercie.

Teraz wyjaśnienie"new" operator tworzenia ciągu i jego odniesienie jest nieco mylące w tym artykule, więc umieszczam kod i wyjaśnienie z samego artykułu, tak jak jest poniżej.

public class ImmutableStrings
{
    public static void main(String[] args)
    {
        String one = "someString";
        String two = new String("someString");

        System.out.println(one.equals(two));
        System.out.println(one == two);
    }
}

W tym przypadku faktycznie mamy nieco inne zachowanie z powodu słowa kluczowego"new." W takim przypadku odniesienia do dwóch literałów String są nadal umieszczane w stałej tabeli (Pula literału), ale gdy dojdziesz do słowa kluczowego"new," JVM ma obowiązek utworzyć nowy obiekt String w czasie wykonywania, zamiast używać tego z tabeli stałej.

Oto diagram wyjaśniający to ..

Czy to oznacza, że ​​także ta literalna pula ciągów ma odniesienie do tego obiektu?

Oto link do artykułu Coreya McGlone

http://www.javaranch.com/journal/200409/Journal200409.jsp#a1

2. Według Kathy Sierra i Bert Bates w książce SCJP:

Aby Java stała się bardziej wydajna pod względem pamięci, JVM odłożył specjalny obszar pamięci zwany „stałą pulą ciągów”, gdy kompilator napotka literał ciągu, sprawdza pulę, aby sprawdzić, czy identyczny ciąg już istnieje. Jeśli nie, to tworzy nowy obiekt literalny.

String s = "abc"; // Tworzy jeden obiekt String i jedną zmienną odniesienia ....

w porządku, ale potem pomyliłem się z tym stwierdzeniem:

String s = new String("abc") // Tworzy dwa obiekty i jedną zmienną odniesienia.

W książce napisano, że .... nowy obiekt String w normalnej pamięci (bez puli) i „s” będzie się do niego odnosił ... podczas gdy dodatkowy literał „abc” zostanie umieszczony w puli.

Powyższe wiersze książki kolidują z tym w artykule Coreya McGlone.

Jeśli String Literal Pool jest zbiorem odniesień do obiektu String, jak wspomniał Corey McGlone, to dlaczego obiekt dosłowny „abc” zostanie umieszczony w puli (jak wspomniano w książce)?

A gdzie znajduje się ta Pula Literału?

Proszę wyjaśnić tę wątpliwość, choć nie będzie to miało większego znaczenia podczas pisania kodu, ale jest bardzo ważne z punktu widzenia zarządzania pamięcią i dlatego chcę usunąć ten fundusz.

questionAnswers(1)

yourAnswerToTheQuestion