Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Stack e Heap

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    10

    Stack e Heap

    Cari frequentatori di html.it, ho da porvi un chiarimento riguardo alla gestione della memoria con i programmi Java.
    Non riesco a comprendere le definizioni di stack e heap, in particolare non riesco, tra libri, internet e appunti, a formulare una definizione valida, precisa e ottimale di questi due "ambienti" (o aree di memoria?! sono un po confuso!).
    Vi ringrazio in anticipo,
    Santi M.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Oddio, non so darti indicazioni precise e dettagliate, ma la cosa di cui sono certo (mi sento di affermarlo), è che nello Stack vanno i dati temporanei come le variabili (tipi semplici), mentre la Heap contiene gli oggetti. In pratica la Heap è continuamente "modificata" da oggetti che occupano memoria, o che spariscono da essa liberandola (grazie al g.c.).

    Se digiti da prompt jvisualvm ti si apre un Utility molto interessante che ti permette di analizzare un programma Java in esecuzione; vedrai così la Heap occupata, e gli oggetti creati e distrutti.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Stack e Heap

    Originariamente inviato da Santyfl
    Cari frequentatori di html.it, ho da porvi un chiarimento riguardo alla gestione della memoria con i programmi Java.
    Non riesco a comprendere le definizioni di stack e heap, in particolare non riesco, tra libri, internet e appunti, a formulare una definizione valida, precisa e ottimale di questi due "ambienti" (o aree di memoria?! sono un po confuso!).
    Vi ringrazio in anticipo,
    Santi M.
    Per quanto riguarda la gestione della memoria in Java, potresti trovare utili le specifiche della JVM:
    http://docs.oracle.com/javase/specs/....html#jvms-2.5

    Il funzionamento di stack e heap è fondamentalmente lo stesso in vari linguaggi, puoi cercare informazioni anche non specifiche riguardo a Java:
    https://www.google.com/search?sugexp...8&q=stack+heap

    Materiale ce n'è, in particolare cosa non ti è chiaro?
    Trovare una definizione di poche parole la vedo dura, per dire qualcosa di sensato trovo necessario dilungarsi leggermente sul funzionamento (LIFO e non) e lo scopo (una fedele allo scope dei dati, l'altra no) delle due aree di memoria.

    EDIT:
    Originariamente inviato da Patrick Jane
    Oddio, non so darti indicazioni precise e dettagliate, ma la cosa di cui sono certo (mi sento di affermarlo), è che nello Stack vanno i dati temporanei come le variabili (tipi semplici), mentre la Heap contiene gli oggetti. In pratica la Heap è continuamente "modificata" da oggetti che occupano memoria, o che spariscono da essa liberandola (grazie al g.c.).

    Se digiti da prompt jvisualvm ti si apre un Utility molto interessante che ti permette di analizzare un programma Java in esecuzione; vedrai così la Heap occupata, e gli oggetti creati e distrutti.
    Non ho controllato ma mi verrebbe da dire che più che una questione di tipi primitivi o oggetti sia una questione di variabili locali o d'istanza (le prime nello stack, le seconde nello heap). Del resto gli oggetti sono insiemi di variabili di tipi primitivi e/o reference ad altri oggetti.
    Sempre che abbia ben capito cosa intendevi, cosa della quale non sono sicurissimo.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    10
    Ragazzi vi ringrazio per le vostre risposte e informazioni utili.
    Cliccando qua e là e consultando dei libri a mia disposizione, sono riuscito a organizzare le mie idee.. Vi riassumo quanto appreso, qualora vi interessasse:

    Lo Stack è un'area di memoria presente nella JVM. Strutturata a pila, funziona secondo la procedura LIFO e in essa vengono passati i parametri alle istruzioni che il programma deve eseguire.
    E' costituita da unità strutturate dette frames, che acquisiscono le informazioni per la chiamata ai metodi.
    All'interno di ogni frame troviamo un'area destinata alle variabili locali per la chiamata al metodo, un'area dedicata all'ambiente di esecuzione del metodo invocato, ed una terza area dedicata allo stack degli operandi; quest'ultimo funziona autonomamente dallo stack delle chiamate a metodo, sebbene sia incluso in esso (quasi come uno "stack nello stack").
    Lo heap è invece un area, alla quale generalmente è allocata all'avvio della jvm una data quantità di memoria, in cui vengono collocati gli oggetti appena istanziati.
    Lo strumento adibito alla deallocazione automatica della memoria è il Garbage collector che evita cattive gestioni della memoria ed eventuali errori a run-time.

    ciao alla prossima!!

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.