Pewnego spokojnego lipcowego wieczoru roku pańskiego 2024 czytając wieczorem w łóżku na ipadzie, przy świetle siec z promieniami zachodzącego słońca leniwie przebijającego się przez moje rolety noc-dzień na taflę mojego niewielkiego budżetowego tv w sypialni, na temat różnych garbage collectorów w jvm trafiłem na informację jakoby G1 posiadał opcję skonfigurowania mechanizmu służącego deduplikacji stringów na heapie (XX:+UseG1GC -XX:+UseStringDeduplication).
Cytując klasyka zacząłem się zastanawiać...

Naturalnie, idąc z duchem czasu zaprzęgłem do roboty chat gpt (w wersji premium plus pro 5g) i zapytałem w jakich wypadkach stringi mogą znaleźć się na heap poza string poolem skoro nikt normalny nie tworzy w aplikacji z palca stringów poprzez new.
W odpowiedzi dostałem:
- Deserializacja obiektów:
• Gdy obiekty typu String są deserializowane z wejścia/wyjścia, nie są automatycznie dodawane do String Pool.
2. Podział na podłańcuchy (substring):
• Gdy tworzone są podłańcuchy z istniejącego Stringa, mogą one czasami trafić bezpośrednio na heap, zwłaszcza w przypadku wersji JVM nowszych niż 1.7, gdzie zmieniła się implementacja klasy String.
3. Dynamiczne generowanie Stringów:
• Kiedy Stringi są generowane dynamicznie, na przykład przez konwersję z innych typów danych (np. String.valueOf(int)), nie zawsze trafiają one do String Pool.
4. Interakcje z zewnętrznymi bibliotekami:
• Gdy Stringi są generowane przez zewnętrzne biblioteki lub frameworki, mogą być tworzone na heapie.
5. Manipulacja przez API:
• Korzystanie z niektórych metod API jak StringBuilder lub StringBuffer, które są używane do dynamicznej modyfikacji i tworzenia Stringów, może spowodować, że wynikowy String znajdzie się na heapie.
i teraz przychodzę z pytanime do szanownych starszych i mądrzejszych kolegów czy ta odpowiedź jest poprawna?
A jeżeli tak to czy ktoś sprawdzał kiedyś jakie efekty daje włączenie tego mechanizmu deduplikacji?
No bo rozumiem, że skoro są to obiekty na heapie jak każde inne to GC nie ma dla nich litości i gdy wykryje, że nie ma do nich referencji (lub jest ale cykliczna) to wywali je w diabły.

