2010-03-28 26 views
5

Perché l'inizializzazione di un oggetto utilizza la parola chiave new denominata allocazione di memoria dinamica, dal momento della compilazione è necessario conoscere la memoria necessaria per tale oggetto.allocazione dinamica della memoria Java?

Inoltre si prega di spiegare che cosa succede quando si fa ClassA object = new ClassA(); in mucchio e pila.

risposta

7

Tutti Gli oggetti Java vengono allocati dinamicamente. Passi sempre dei riferimenti a loro. Ecco come è progettato il linguaggio. Quando si esegue:

ClassA obj = new ClassA(); 

Poi l'oggetto è allocato sul mucchio e un riferimento ad esso è memorizzato in pila (supponendo che è all'interno di un metodo, ovviamente). Ciò significa che puoi sempre passare oggetti senza preoccuparti di dove sono memorizzati.

+0

Perché l'oggetto è memorizzato nel Heap e il riferimento è memorizzato in Pila? – JavaUser

+1

Lo stack contiene le variabili locali della chiamata al metodo. Qui, ho assunto che la variabile 'obj' fosse in una chiamata di metodo, quindi ovviamente il riferimento all'oggetto è in pila. L'oggetto stesso è nell'heap, come con ogni altro oggetto Java nell'intero programma. Anche le classi sono nell'heap (anche se un compilatore JIT potrebbe fare alcuni trucchi extra dietro le quinte). –

5

È dinamico poiché non si conosce quando ha bisogno di allocazione - allocare su richiesta.

Nota anche di sapere quanta memoria richiede quell'oggetto, ma non di quanto i membri di tale oggetto richiedono. Questo può essere determinabile solo in fase di esecuzione (ad esempio un array di dimensioni variabili).

0

Se si dispone di una classe di JMath e si desidera ottenere tutti gli oggetti in fase di esecuzione (allocazione dinamica), allora hai appena scritto

ArrayList<JMath> J = new ArrayList<JMath>(); 
Problemi correlati