Newsgroup: it.comp.java
Titolo: Java mi divora la memoria...

Ciao
ultimamente mi sono crollate alcune certezze:-), mi sono accorto
infatti che in seguito alla chiusura e apertura di alcuni dialoghi
modali la memoria di sistema cala sempre inesorabilmente.
Ho fatto un banale menu swing da cui richiamo una finestra di dialogo
modale: 
  void jMenuItem1_actionPerformed(ActionEvent e) {
    Dialog1 d= new Dialog1(this,"Dialog1", true);
     d.show();
     System.gc();  // come non ci fosse
  }
Dialog1 e' una classe derivata da JDialog che alloca un diversa
memoria per rendere evidente il problema:
  private  byte[] data;
  data = new byte[1000000];
ogni volta che apro il dialogo la memoria di sistema (win98-> monitor
di sistema-> memoria allocata) cala, chiudendo il dialogo la memoria
non viene rilasciata.Alla successiva creazione del dialogo la memoria
cala nuovamente. Continuando di questo passo si arriva al crask di
win.
Ho anche provato ad invocare il System.gc() in diversi punti ma non
sembra fare il suo dovere, anche se pondo esplicitamente d=null;
Qualche idea?
Ciao,
 Francesco Mascarello

 Nemmeno invocandolo tu a mano. Ma sentiamo che ne dicono gli altri...
System.gc suggerisce di chiamare il garbage collector (cfr le API)

> System.gc suggerisce di chiamare il garbage collector (cfr le API)
"Calling this method suggests that the Java Virtual Machine expend effort
toward recycling unused objects in order to make the memory they currently
occupy available for quick reuse. When control returns from the method call,
the Java Virtual Machine has made a best effort to reclaim space from all
unused objects."
Devo ammettere, mi è tutt'altro che chiaro...

Nemmeno invocandolo tu a mano. Ma sentiamo che ne dicono gli altri...
Hai ragione, ma  anche aspettando  ore la memoria non viene liberata.
L'esempio di cui sopra e'solo una semplificazione di un problema che
ho con una mia aplicazione che funziona 24 ore su 24. Dopo un paio di
giorni il pc si pianta per scarsita'di memoria con file di swap sopra
400 megabyte! ( ogni tanto il gc viene chiamato per sicurezza, ma
credo inutilmente).
Il problema e' comunque ricoducibile al fatto che in seguito alla
chiusura di un dialogo modale la memoria occupata non viene liberata,
neache aspettando o invodando il gc a distanza di tempo.
A questo punto sto pensando ad un bug della java virtual machine
fornita col JBuilder 3 (VAppAccelerator(tm) 1.2.010 for Java (JDK
1.2): una applicazione stupida con la sola finestra di dialogo di help
potrebbe mandare in crask il sistema a seguito di numerore operazioni
di apertura e chiusura...e' troppo strano.
Ciao!
 Francesco Mascarello.

 wrote in message
3a8f8ad...@news.cs.interbusiness.it...


 wrote in message
news:3a8f8ad...@news.cs.interbusiness.it...


contiene la finestra rimarrà in memoria!!!!
hai ragione, purtroppo sono incappato in un bug di java:
http://developer.java.sun.com/developer/bugParade/bugs/4246299.html
per cui,pur con tutte le attenzioni, rimane un reference all'oggetto e
questo non viene ripulito dal gc.
Resta il fatto che questo comportamento lo giudico veramente grave,
specie considerando che gia il codice prodotto dal wizard di JBuilder
crea problemi:-(
La soluzione consiste nel tenere la finestra di dialogo in memoria e
riusarla ( hide, show), ma spero di usare altre soluzioni, altrimenti
mi serve in ogni caso tanta memoria ( 900 mb si swap si win98se sono
troppi....)
Ciao,
Francesco Mascarello.