При попытке открыть размер макс массива Java Струнный на моей машине, я натолкнулся на некоторые интересные результаты, вот код,Что происходит с распределением памяти здесь?
String [] max;
int i = 15444000;
while(true){
try{
max = new String[i];
System.gc();
Thread.sleep(10);
}catch(InterruptedException e){}
i += 1;
System.out.println(i);
}
Всякий раз, когда я запускаю этот код на выходе делает его перед броском OutOfMemoryError. Это заставляет меня думать, что размер максимум из массива Java Струнный на моей машине , однако, если я заменить
int i = 15444000;
с
int i = 15444037; // or any i between 15444037 and 15444002
OutOfMemoryError происходит мгновенно. Почему это, и каков истинный максимальный размер массива Java String на моей машине?
Сколько памяти вы выделили для JVM? – CookieOfFortune
Как указывает Печенье, GC настолько непредсказуем, что такой тест, наконец, не означает многого. –
И что вы на самом деле пытаетесь проверить? Количество элементов, которые вы можете иметь в массиве? Здесь не было никакой разницы между String [] и Object [] или чем-либо еще, поскольку вы просто создаете пространство для ссылки ... Вы пытаетесь выяснить максимальный размер строки? Разве Java не требует, чтобы массивы занимали непрерывное пространство? Тогда вы получите разные ответы за все время работы виртуальной машины, что находится в perm gen и т. Д. –