Почему максимальный размер массива ArrayList равен Integer.MAX_VALUE - 8?
Я изучаю документацию по Java 8 дляArrayList
, Я получил, что максимальный размер массива определяется какInteger.MAX_VALUE - 8
значит 2 ^ 31 - 8 =2 147 483 639, Затем я сосредоточился на том, почему вычитается 8 илиwhy not less than 8
или жеmore than 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;
Я получил несколько связанных ответов, но не выполнил свою задачу.
Максимальный размер Java-массивов?Сколько данных в списке может храниться максимальноПочему я не могу создать массив с большим размером?Некоторые люди дали некоторую логику, что согласно документации"Some VMs reserve some header words in an array"
, Так что для слов заголовка вычитается 8. Но в этом случае, если заголовок слова нужно больше, чем 8, то каков будет ответ?
Пожалуйста, разъясните мне на этом основании. Заранее спасибо за ваше сотрудничество.