Architettura JVM - Gestione della memoria

di il
4 risposte

Architettura JVM - Gestione della memoria

Ciao a tutti,
sto studiando l'architettura della Java Virtual Machine e se ho ben capito è strutturata nel seguente modo:
1. Workspace: contenente il codice in bytecode che deve essere eseguito
2. Stack: contenente le variabili, le costanti e i puntatori agli oggetti complessi
3. Heap: contenente gli oggetti complessi.

So che il sistema di GC (Garbage collector) gestisce la memoria heap andando a liberare spazio qualora un qualsiasi oggetto memorizzato non sia più utilizzabile, mi chiedevo però, chi gestisce la memoria occupata dalle variabili e dalle costanti istanziate per esempio nel metodo main e memorizzate (se ho capito bene) nello stack ?

Grazie

4 Risposte

  • Re: Architettura JVM - Gestione della memoria

    Non "utilizzabili", ma "utilizzate".
    per la seconda domanda: nessuno
  • Re: Architettura JVM - Gestione della memoria

    Vuoi dire che il GC potrebbe liberare spazio nella memoria heap andando ad eliminare un oggetto che potrebbe essere "utilizzabile" in futuro ma che al momento non è utilizzato ?

    Per quanto riguarda la seconda parte: di conseguenza la porzione di memoria riservata allo stack non viene mai liberata fino al termine dell'esecuzione del programma ? So che è al limite dell'impossibile, ma questo non potrebbe generare problemi di memoria ?
  • Re: Architettura JVM - Gestione della memoria

    DanPir ha scritto:


    Vuoi dire che il GC potrebbe liberare spazio nella memoria heap andando ad eliminare un oggetto che potrebbe essere "utilizzabile" in futuro ma che al momento non è utilizzato ?
    No, alt. Un oggetto è "eleggibile" per il garbage collector quando NON è più "raggiungibile". Attenzione: "raggiungibile" è diverso dall'essere "referenziato". Due oggetti possono referenziarsi tra di loro in ciclo ma essere entrambi non raggiungibili. E il g.c. li prenderebbe in considerazione entrambi.

    Il concetto del "raggiungibile" riguarda il fatto di poter tracciare un cammino verso l'oggetto partendo da un insieme noto di "radici". Se l'oggetto è raggiungibile, NON può essere toccato dal g.c.

    DanPir ha scritto:


    Per quanto riguarda la seconda parte: di conseguenza la porzione di memoria riservata allo stack non viene mai liberata fino al termine dell'esecuzione del programma ? So che è al limite dell'impossibile, ma questo non potrebbe generare problemi di memoria ?
    Innanzitutto lo stack non è uno solo. Ogni thread ha il SUO proprio stack. E all'interno di uno stack ci sono N "frame". Dove ogni frame rappresenta la invocazione di un metodo, con le sue variabili locali e altro.

    Quindi più thread esistono, più stack ci sono e di conseguenza potenzialmente "molta" memoria occupata. Ma quando un thread termina/sparisce, pure il suo stack sparisce!
  • Re: Architettura JVM - Gestione della memoria

    Ok, ora mi è più chiaro! Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte