Esistono ragioni teoriche per cui gli array in C richiedono meno RAM rispetto a Java?

1

La mia esperienza è che Java richiede circa il doppio della RAM rispetto a C (confrontando i char array o altri confronti). Ho anche letto in un libro di hardware che Java richiede circa il doppio di RAM rispetto a C. È basato esclusivamente su prove empiriche o ha anche una spiegazione teorica? Esiste un limite teorico che limita Java a minimizzare l'utilizzo della memoria?

    
posta Niklas Rosencrantz 08.06.2014 - 02:12
fonte

1 risposta

4

In genere non lo fanno (lo so, lo so) poiché una serie di tipi primitivi viene allocata allo stesso modo degli array C: blocchi contigui di memoria per ciascun elemento. Tuttavia, una serie di oggetti è leggermente diversa quando si ottiene una matrice di puntatori che fanno riferimento agli oggetti java. C assegnerebbe un blocco contiguo di memoria per contenere gli oggetti reali.

Un char in Java è di 2 byte, forse questo è quello che stai notando (o se finisci con i tipi wrappered - un char che viene recuperato da un metodo JDK potrebbe richiedere il wrapping nel qual caso richiede 16 byte ), o forse stai notando che gli array Java occupano 12 byte solo per iniziare, e quindi vengono arrotondati al blocco di allineamento della memoria più vicino (cioè 8 byte)

Vedi una panoramica delle tecniche di salvataggio della memoria in Java.

16 byte per carattere in Java se non stai molto attento .. ahi.

    
risposta data 08.06.2014 - 03:10
fonte

Leggi altre domande sui tag