Ho scritto una piccola applicazione java (la mia prima!), Che al momento fa solo alcune cose. Attualmente, esegue la classe Main che lancia una classe gui (una classe che ho scritto che estende JFrame che contiene solo un JTextArea), una classe che carica un file locale attraverso un BufferedInputStream che è di circa 40kb, e una classe che carica una voce da un File di proprietà Java.Utilizzo della memoria dell'applicazione Java
Tutto funziona meravigliosamente, tuttavia, stavo guardando il task manager di Windows e ho notato qualcosa che mi sembrava strano. Quando avvio l'applicazione, l'utilizzo della RAM salta a circa 40 MB mentre carica il file locale e ne estrae alcuni valori da visualizzare in JTextArea, cosa che a me sembra normale a causa della JVM, delle classi base Java, ecc. A questo punto, tuttavia, quando l'applicazione ha terminato il caricamento del file, rimane tranquillamente inattivo, poiché attualmente non lo faccio fare altro. Mentre è inattivo, finché la finestra è attiva, l'utilizzo della memoria dell'applicazione inizia a salire di 10-20kb al secondo. Questo mi sembra strano. Se faccio clic su un altro programma per fare in modo che questa sia la finestra inattiva, la memoria si alza ancora, ma a una velocità molto più lenta (circa 10kb ogni 3-5 secondi).
Non ho provato per vedere fino a che punto sarebbe salito, ma questo mi sembra un comportamento molto strano. È normale questo comportamento di Java? Immagino sia possibile che il mio codice stia perdendo memoria, ma non sono sicuro di come. Ho fatto in modo di chiudere il BufferedInputStream che sto usando, e non riesco a vedere che altro potrebbe causare questo.
Mi dispiace se la mia spiegazione non ha senso, ma apprezzerei qualsiasi intuizione e/o puntatori che qualcuno possa avere.
UPDATE:
su suggerimento, ho praticamente spogliato la mia domanda fino alla classe principale che chiama semplicemente la classe gui. La classe gui estende solo JFrame e imposta le dimensioni della finestra, l'operazione di chiusura e le proprietà visibili. Con questi cambiamenti, la memoria cresce ancora a 10-20kb, ma a un ritmo più lento. Questo, in combinazione con altri consigli che ho ricevuto, mi porta a credere che questo sia solo Java. Continuerò a giocarci e ti farò sapere se scoprirò qualcos'altro di interessante.
Congratulazioni per la tua prima app !!! Forse potresti postare del codice? Senza codice stiamo solo indovinando. Inoltre continua a monitorarlo per vedere se continua a crescere o se si ferma a un certo punto. Pubblica i tuoi risultati. –
@Romain, grazie! Ho pensato di pubblicare il mio codice, ma onestamente, ero più interessato a vedere se questo è in qualche modo normale comportamento di Java (non lo pensavo, ma tutto è possibile!). Investigherò di più e quindi pubblicherò il codice se non riesco a capire perché, tra qualche giorno. Grazie! –
#masternosaj È normale che la memoria fluttui mentre si aggiorna internamente allo schermo e la garbage collection è terminata. Non è normale che la memoria continui a crescere. Se sei un principiante Java, ho visto persone che chiedono recensioni di codice di sezioni di codice su questo sito. –