Sie sind alle in dem Heap gespeichert, aber intern()
ed Strings (einschließlich Stringliterale in der Quelle) sind aus einem Pool in der String
Klasse verwiesen.
Wenn sie als Literale im Quellcode erscheinen, einschließlich Konstantenzeichenfolgenausdrücken (z. B. "a" + "b"
), werden sie auch von der Class
der in erscheinen, die normalerweise bedeutet, dass sie so lange dauern, wie der Prozess ausgeführt wird.
bearbeiten: Wenn Sie intern()
auf eine Zeichenfolge in Ihrem Code nennen es auch zu diesem Pool hinzugefügt wird, sondern weil es nutzt schwache Verweise die Zeichenfolge kann noch Müll gesammelt werden, wenn sie nicht mehr in Gebrauch ist.
Siehe auch: interned Strings : Java Glossary
Zitat aus diesem Artikel:
Die Sammlung von Strings in diesem HashMap registrierte manchmal der String-Pool genannt wird. Sie sind jedoch gewöhnliche Objekte und leben auf dem Haufen wie jeder andere (vielleicht in einer optimierten Weise, da internierte Stränge dazu neigen, langlebig zu sein).
Wenn Sie die _constant pool_ beziehen, die Teil der Klassendefinition ist, dann _can_ Sie den konstanten Pool entladen kann, sofern Sie die Klasse entladen (die in der Regel dereferencing den Klassenlader und alle Verweise auf sie geladen ist Klassen). Schwieriger als Ihr typisches Programm, aber Tomcat tut es. –