Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    [Java] Spiegazione memoria e GC

    Ho una domanda per quanto riguarda il GC e la memoria.
    Lo so che non è un problema di codice e me ne scuso.
    Dunque, ho letto da qualche parte che quando un oggetto esce dal suo scope, viene marcato come cancellabile dalla routine del GC, e quando la memoria scarseggia, o viene comunque data una spazolata di GC, viene rilasciata la memoria occupata dall'oggetto (detto in modo maccheronico).
    Ora, ho anche letto che le Collection in generale non vengono rilasciate, nel senso che se genero un oggetto Collection et simila, dura per tutta la vita dell'applicativo.
    E' vero?
    Se metto a null quando non mi serve più l'oggetto, il GC lo cancella invece?
    E' normale che la voce più grossa in termini di memoria usata sia un oggetto riconducibile a java.awt.image.DataBufferInt? Io ho pensato che sia dovuto al double buffering delle applicazioni swing visto che se vario dimensione alla finestra, i byte aumentano anche a 1MB, 2MB, salvo poi tornare a pochi kB quando il GC entra in funzione.

    PS: ho scoperto il profiler e stavo cercando memory leak nell'applicativo
    al volante son nervoso

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Spiegazione memoria e GC

    Originariamente inviato da Rubox
    quando un oggetto esce dal suo scope
    No, è una questione di "raggiungibilità". Detto in modo semplice, un oggetto diventa "eleggibile" per il g.c. quando non è più raggiungibile da alcun "live" thread. Insomma, quando a partire da un set di "radici" (gli stack frame dei thread e i campi statici delle classi principalmente) non è possibile tracciare un "cammino" verso l'oggetto.
    Attenzione, ho parlato di "raggiungibilità", non di "essere referenziato". Due oggetti possono referenziarsi l'uno con l'altro ma non essere raggiungibili (island of isolation). E verrebbero tuttavia eletti lo stesso per il g.c.

    Originariamente inviato da Rubox
    se genero un oggetto Collection et simila, dura per tutta la vita dell'applicativo.
    No!

    Originariamente inviato da Rubox
    Se metto a null quando non mi serve più l'oggetto, il GC lo cancella invece?
    Se mettendo quella variabile a null, non c'è altro per cui si possa raggiungere l'oggetto .... allora ovviamente sì, va al gc.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Quindi se quando avvio l'applicazione Swing il numero di generazioni oggetti aumenta fino ad un certo valore e poi resta costante, non dovrei avere memory leak?
    E se quando "vario" la GUI poiché mi disegna un pannello nuovo o apre una dialog vengono generati degli oggetti che alla prima passata di GC, dopo che la dialog è stata chiusa, sono cancellati, dovrebbe essere normale, giusto?
    al volante son nervoso

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.