Šta je novo?

nesto malo o javinom GC-u

  • Začetnik teme range
  • Datum pokretanja
R

range

Guest
Daklem, ovo je nesto vise kao komentar, mada ako neko ima smisleniji odgovor na ovaj slucaj od mene neka ga slobodno napise.
Elem, imam klijent-server aplikaciju u javi koja je sto se tice user interfejsa poprilicno heavy, ima par desetina dijaloga i na svakom po nekoliko desetina komponenti, sto raznoraznih inputbox-eva, labela, tabela.... Problem je poceo da se desava posle nekog vremena koriscenja programa, javlja se java.lang.OutOfMemoryError. Posto se dosta koristim vectorima, mislio sam da sam napravio standardan memory leak. Medjutim sve je lepo bilo ociscenjo. Koriscenjem opcije java-verbose:gc pri pokretanju programa napravio bi se leak od prvo par mb, a onda otvaranjem svakog dijaloga od najmanje 8mb. Posto je za java virtuel masinu po defaultu odvojeno 64mb, posle jedno 10 otvaranih dijaloga program bi pucao. Evo do cega sam ja dosao.
Prvo: po defaultu this.close() metod na dijalogu radi HIDE_ON_CLOSE operaciju sto ne omogucava dijalogu da bude ociscen od strane gc-a. Medjutim ni ako se stavi DISPOSE_ON_CLOSE ne resava se problem.
Moj zakljucak je da dijalozi kada se zatvore na neki nacin ostaju referencirani od strane main-framea, pa ih nije moguce ocistiti. Stoga sam ja presao na JFrame umesto JDialoga. Ukoliko je neko resio ovaj slucaj na neki nacin ili je bolje citao dokumentaciju, neka kaze, medjutim moje misljenje je zasada da postoji bug u java.awt paketu ili java.swing paketu koji pravi memory leak pri koriscenju JDialoga.
toliko
 
Vrh Dno