spazio dell'heap Java

4

In Java / JVM, perché chiamiamo il luogo di memoria in cui Java crea oggetti come "Heap"?

Utilizza la struttura dei dati di heap per creare / rimuovere / mantenere gli oggetti?

Come ho letto nella documentazione della struttura dei dati di heap, l'algoritmo confronta gli oggetti con i nodi esistenti e li posiziona in modo tale che l'oggetto padre sia "maggiore" dei bambini. (O "minore" in caso di heap minimo). Quindi in JVM, in che modo gli oggetti vengono confrontati l'uno con l'altro prima di posizionarli nell'heap?

    
posta java_mouse 18.09.2012 - 16:29
fonte

5 risposte

8

L'heap come nella memoria disponibile per l'allocazione dinamica della memoria non ha nulla a che fare con l'heap come in qualsiasi struttura dati o l'invariante dell'heap (che è in effetti correlato alla struttura dati). "Heap" è solo una parola comune, ed è stato scelto per entrambi i concetti in modo indipendente (Wikipedia nota che il termine è stato usato per la struttura dei dati prima, ma nessuna menzione di influenza).

Mentre è probabilmente possibile costruire un sistema di gestione della memoria che usa una struttura di dati dell'heap (o piuttosto una coda di priorità) in alcuni punti, non sono a conoscenza di alcun algoritmo esistente che lo faccia, e dubito che sarebbe utile, al di fuori forse qualche nicchia molto specifica.

    
risposta data 18.09.2012 - 16:51
fonte
2

Il termine "heap" qui non si riferisce alla struttura dei dati; invece ha il significato più generale di "una grande pila di memoria per gettare le cose in cima", in contrapposizione allo "stack", che è molto più strettamente ordinato. "Heap" di C # è simile.

    
risposta data 18.09.2012 - 22:42
fonte
1

Se si volesse utilizzare un Heap per implementare la garbage collection, probabilmente si ordinassero gli oggetti per il conteggio dei riferimenti in un Min-Heap, tirando regolarmente quelli a zero. Non sto dicendo che questo è come è fatto o altro, ma è una possibilità economica e veloce.

    
risposta data 18.09.2012 - 17:47
fonte
1

L'area utilizzata per l'allocazione dinamica è tradizionalmente chiamata heap perché in questo modo i primi allocatori dinamici hanno ordinato la memoria, in un heap, in base alla dimensione del blocco. Ovviamente, la gestione della memoria della JVM non ha assolutamente nulla a che fare con un heap, e anche gli allocatori di memoria più moderni hanno poco in comune con esso. Ma è qui che il termine ha origine.

    
risposta data 21.09.2012 - 14:13
fonte
0

L'heap in JVM non è correlato alla struttura dati, è più simile a uno spazio, in cui gli oggetti creati dall'operatore "nuovo" vengono assegnati alla memoria in fase di esecuzione. La gestione della memoria nell'heap viene eseguita più de-riferimento di oggetti che non sono più in uso. A partire da ora, non sono sicuro di quale algoritmo venga utilizzato, ma abbiamo il programma di garbage collector che determina quali oggetti non sono più referenziati da un programma e vengono rimossi dall'heap.

    
risposta data 21.09.2012 - 10:59
fonte

Leggi altre domande sui tag