Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Problema Memoria Ram

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    10

    Problema Memoria Ram

    Allora praticamente il mio problema è che il programma non rilascia la memoria come dovrebbe.
    Mi spiego,io ho questa finestra che al suo interno ha un pannello,premuto un tasto si passa ad una schermata di gioco.
    Mettiamo che prima di andare a questa schermata la memoria occupata sia 50,e durante il gioco sia 100,se torno alla schermata precedente la memoria non scende nuovamente a 50,ma rimane a 100.
    Eppure non vi è più nessun riferimento alla schermata di gioco,quindi quale potrebbe essere il problema?
    Grazie in anticipo =)

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Liberare la memoria ha un costo. Per questo motivo la JVM libera automaticamente la memoria non più necessaria solo quando è necessario: se c'è abbondanza di memoria non ha senso perdere cicli macchina per fare una cosa inutile, no?

    Comunque prova a chiedere alla JVM di far partire il garbage collector (con System.gc()) e vedi se la situazione cambia. Occhio che è solo in invito a partire: la JVM potrebbe tranquillamente fregarsene
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    10
    Ho gia provato con il System.gc(),però non funziona,il fatto è che il gioco dispone anche di una modalità reset,e se uno resetta continuamente la memoria continua a salire,insensatamente,poichè tutti i thread vengono fermati,le variabili vengono messe a null ed altre ottengono altri valori!
    Ho utilizzato anche delle musiche tramite questi metodi:

    AudioInputStream stream = AudioSystem.getAudioInputStream(new File(percorso));
    AudioFormat format = stream.getFormat();
    if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
    stream = AudioSystem.getAudioInputStream(AudioFormat.Encodi ng.PCM_SIGNED,stream);
    }
    DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat());
    clip = (Clip) AudioSystem.getLine(info);
    clip.open(stream);

    Potrebbe essere questo il problema?
    Diciamo piu che altro che lo faceva anche senza le musiche però ovviamente doveva caricare meno "roba" e quindi non dava fastidio,ma altrimenti aggiunge cose tipo 20kb a volta!

    Inoltre,può essere una cosa strana da dire,ma potrebbe essere un problema della ultima versione java (magari di un aggiornamento),perchè prima non ricordavo si comportasse così (anzi lo faceva con il mediatracker,ma poi avevo risolto mettendolo a null ad ogni reset,ma ora il problema è tornato,senza in realtà aver fatto niente (riprendendo versioni vecchie del programma))

    Ho notato inoltre che questa cosa di non rilasciare la RAM da una finestra all'altra non deriva solo dal gioco ma anche dalle altre normalissime finestre (senza ancora aver nemmeno aperto il gioco),se passo da una all'altra non rilascia la memoria!

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Toccio
    Ho gia provato con il System.gc(),però non funziona

    Ho notato inoltre che questa cosa di non rilasciare la RAM da una finestra all'altra non deriva solo dal gioco ma anche dalle altre normalissime finestre (senza ancora aver nemmeno aperto il gioco),se passo da una all'altra non rilascia la memoria!
    Come dice la documentazione, e come ti ho detto sopra, System.gc() non necessariamente libera memoria

    Calling the gc 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.
    Se la JVM rileva che non è necessario liberare memoria... non la libera!

    Inoltre bisognerebbe come crei gli oggetti, dove li crei, quanti ne crei... E senza codice non ti si può dire qual è il problema. Ti suggerisco di eseguire il tuo programma con jvisualvm (lo trovi nella cartella bin dell'SDK) così da vedere effettivamente tutte le informazioni su quanti oggetti crei, quanto occupano, ecc.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    10
    Ho provato quel tuo programma,e mi dava una infinità di thread,probabilmente dovuti alla musica,però pure levandola si ha un incremento,seppu piccolo,della ram.
    Volevo sapere,se io ho un thread che è stato runnato,ed è fermo in un ciclo while,questo a quanto ho visto,anche se non è referenziato da nulla finche viaggia non viene eliminato dal GC.
    La domanda è,una volta che esce dal while e termina il run,questo thread viene eliminato dal GC?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Toccio
    La domanda è,una volta che esce dal while e termina il run,questo thread viene eliminato dal GC?
    Sì, poichè un oggetto Thread non è riutilizzabile.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    10
    Allora,ho creato qualcosa di simile,è praticamente un programma con due classi,un JFrame con un pulsante che se premuto carica in memoria 50 volte la stessa musica(che è il sottofondo di pacman,non avevo altro u.u),queste vengono instanziate senza alcun riferimento,quindi dovrebbero essere "immediatamente collezionate" dal GC,l'alta classe è una classe musica dove si passsa il path della canzone e la carica in un clip.
    Noterete che se premerete iòl pulsante molte voltela memoria continuerà a salire,eppure non fa niente di eccezionale.
    E' un problema dello stream audio?Oppure è qualcosa di Java?

    Questo è il link al progetto,ho messo nella cartella principale anche il jar,dovrete farlo partire da li se non voelte usare netbeans u.u

    http://www.mediafire.com/?553i4j6k43y3fgw

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.