Sto studiando la documentazione Java 8 per ArrayList
. Ho capito che la dimensione massima dell'array è definita come Integer.MAX_VALUE - 8
significa 2^31 - 8 = . Quindi mi sono concentrato sul motivo per cui 8 viene sottratto o why not less than 8
o more than 8
viene sottratto?Perché la dimensione massima dell'array di ArrayList è Integer.MAX_VALUE - 8?
/**
* The maximum size of array to allocate.
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
Ho ottenuto alcune risposte correlate ma non soddisfacendo la mia spinta.
- Do Java arrays have a maximum size?
- How many data a list can hold at the maximum
- Why I can't create an array with large size?
Alcune persone trattate con una certa logica che secondo la documentazione "Some VMs reserve some header words in an array"
. Quindi per le parole di intestazione, 8 viene sottratto. Ma su quel caso, se le parole di intestazione hanno bisogno di più di 8, allora quale sarà la risposta?
Per favore chiariscimi su questa base. Grazie per la collaborazione.
Se sono necessari più di 8 parole di intestazione, allora sarebbe in crash quando ha ottenuto così grande. Quindi 8 è la stima dell'autore di ArrayList del numero massimo di parole di intestazione extra che sarebbero necessarie. –
Su una nota non correlata: se stai allocando un array con 2 miliardi di elementi, probabilmente c'è qualcosa che non va da qualche parte. – Tunaki
@LouisWasserman - in VM 8 byte è più alto? Se possibile, per favore fatemelo sapere. – SkyWalker