Sobes.tech
Junior — Middle

W jakim miejscu w pamięci magazynu Java znajdują się obiekty łańcuchowe?

sobes.tech AI

Odpowiedź od AI

W Javie obiekty łańcuchów znaków (String) są przechowywane w specjalnym obszarze pamięci zwanym String Pool (pula łańcuchów), który znajduje się w Metaspace lub w PermGen (w starszych wersjach JVM).

Gdy tworzony jest literał łańcucha, JVM sprawdza pulę łańcuchów: jeśli taki łańcuch już istnieje, zwraca odwołanie do istniejącego obiektu; w przeciwnym razie tworzy nowy obiekt i umieszcza go w puli. To pozwala zaoszczędzić pamięć i przyspiesza porównywanie łańcuchów.

Jeśli łańcuch jest tworzony za pomocą konstruktora new String(), obiekt jest tworzony na stercie (heap), a nie w puli, i nie zostanie automatycznie dodany do String Pool, dopóki nie wywoła się jawnie metody intern().

Przykład:

String s1 = "hello"; // łańcuch w puli
String s2 = new String("hello"); // obiekt na stercie
String s3 = s2.intern(); // s3 odwołuje się do łańcucha w puli