Java'da ArrayList
s ürünlerinin nasıl geliştirildiğini okuyarak ilgili belgeleri okuyorum. Neden hugeCapacity(int minCapacity)
yönteminin neden Integer.MAX_VALUE
veya MAX_ARRAY_SIZE
döndürmeyi seçtiğini anlamıyorum. MAX_ARRAY_SIZE
sınıfında tanımlanan nasıl kaynaktan Java 8 Arraylist hugeCapacity (int) application
244 | private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
Bu Integer.MAX_VALUE
bir tamsayı (32 bits
) büyüklüğüne göre kapalı hariç neredeyse aynıdır.
264 | private static int hugeCapacity(int minCapacity) {
265 | if (minCapacity < 0) // overflow
266 | throw new OutOfMemoryError();
267 | return (minCapacity > MAX_ARRAY_SIZE) ?
268 | Integer.MAX_VALUE :
269 | MAX_ARRAY_SIZE;
270 | }
herkes ince bir fark MAX_ARRAY_SIZE
karşı Integer.MAX_VALUE
dönen ne olduğunu bana söyleyebilir misiniz? Her iki şekilde de OutOfMemoryError
oluşmamalıdır?
cevap MAX_ARRAY_SIZE yukarıdaki yorumunda hemen orada "sınırlandırır. Anlamı: Bazı VM'lerde OutOfMemory'yi önleyebilirsek, aksi takdirde Integer.MAX_VALUE değerini atarız ve eğer şanslıysanız (VM'ye bağlı olarak) başarılı oluruz. –