Gdzie jest tworzony String pool

0

Cześć,

Odnośnie tego dość już leciwego tematu różnice między STACK oraz HEAP

Gdzie jest String pool? na Stercie czy na stosie? Mam w głwie obrazek wyjaśniający, że String pool powstaje na stercie ale nie potrafię go teraz odszukać.
Jak to jest z String pool - sterta czy stos?

0

Na stosie to byłoby raczej bez sensu.

A gdzie dokładnie na stercie to zależy od JVM.
http://java-performance.info/string-intern-in-java-6-7-8/

Pytanie zasadnicze - właściwie to co Ci daje ta odpowiedź?

0
jarekr000000 napisał(a):

Na stosie to byłoby raczej bez sensu.

A gdzie dokładnie na stercie to zależy od JVM.
http://java-performance.info/string-intern-in-java-6-7-8/

Pytanie zasadnicze - właściwie to co Ci daje ta odpowiedź?

Pytanie urodziło się przy rozważaniach który sposób jest szybszy przy konktatenacji (String Builder, String Buffer, zwykły String). Chodzi mi o to, że kiedy String pool jest edytowany/nadpisywany to dzieje się to tak jak przy StringBulder za pomocą metody append czy powstaje za każdym razem nowy obiekt? Nie mogłem znaleźć odpowiedzi więc zacząłem podchodzić do tego od innej strony.

Tak samo nie wiem jak ma się do String poola Garbage Colection. Jeżeli jest na stercie to jest przez GC "obsługiwany", jeżeli na stosie to już nie?

Wynikają z tego dwa pytania:

  1. Jak String pool jest edytowany/nadpisywany (nowy obiekt czy coś w rodzaju metody append)?
  2. Czy String pool jest "obsługiwany" przez Garbage Colection?
0
  1. Czy String pool jest "obsługiwany" przez Garbage Colection?
  • zasady są takie same jak dla wszystkich obiektów z tym że (tutaj tylko domysł), jak string jest wrzucany do pooli stringów z metody
metoda()
{
 String abc = "ide do string pool"
}
  • tutaj pytanie - może jakiś specu się znajdzie - jak JIT zrobi z jakiegoś if'a uncommon-trap to może powiedzieć że String nie jest używany i go wywalić z pooli, np:
metoda()
{
 if(cos)
 {
 //uncommon trap
 String abc = "czy zostane oznaczony jako obiekt pod GC ? "
 } 
}

to string "ide do string pool" nie będzie kandydatem dla GC tak długo jak metoda metoda() będzie możliwa do wykonania.

  • Pytanie urodziło się przy rozważaniach który sposób jest szybszy przy konktatenacji (String Builder,
    javac zrobi za Ciebie z
    "a" + "b" + "c" string buildera - nie musisz robić tego sam.

  • zwykły String
    pamiętaj też że robiąc

 metoda()
 {
 String abc = new String("xxx");
 {

wchodzi w gre także escape analysis - ten obiekt może wgl się na heapie nie pojawić :)

0

Z kursu Javy organizowanego przez Suna (no, niecałe 10 lat temu) pamiętam, że string pool to jest trochę osobny byt. Mógłbym powiedzieć, że jest stos, sterta i string pool.

1 użytkowników online, w tym zalogowanych: 0, gości: 1