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.