Я придумал следующий метод. Я получаю ошибку stackoverflow. Есть ли более быстрый способ?Самый быстрый способ исчерпать память
static void looper(){
long a = 0;
a++;
System.out.println(a);
looper();
}
Я придумал следующий метод. Я получаю ошибку stackoverflow. Есть ли более быстрый способ?Самый быстрый способ исчерпать память
static void looper(){
long a = 0;
a++;
System.out.println(a);
looper();
}
быстрый способ получить OutOfMemoryError
является:
final int[] memoryGrave = new int[Integer.MAX_VALUE];
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
(Вы можете более найти о максимальных размерах массивов в этом вопросе: Do Java arrays have a maximum size?)
Но это возможно, не будет тем, что вы ищете, поскольку возможно, что JVM проверяет запрос ed размер массива и выбрасывает эту ошибку до Фактически заканчивается память.
Но вы можете изменить этот код немного, чтобы сделать это «правильно»:
final List<int[]> memoryGrave = new ArrayList<>();
while(true) {
memoryGrave.add(new int[Integer.MAX_VALUE - 5]);
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Но если это «быстрый способ» получить эту ошибку (и на самом деле запустить из памяти) все еще можно обсудить.
Когда вы заключаете код выше в try/finally
, то вы можете измерить время, необходимое, чтобы бросить эту ошибку:
long start = System.currentTimeMillis();
try {
final List<int[]> memoryGrave = new ArrayList<>();
while (true) {
memoryGrave.add(new int[Integer.MAX_VALUE - 5]);
}
} finally {
System.out.println(System.currentTimeMillis() - start);
}
На моей машине она должна окрестными 30 мс.
'static void loper() {loper();}'? Зачем? – Bathsheba
Если вы хотите получить 'StackOverflowError', тогда просто вызовите' looper' в качестве первого оператора. Не нужно создавать, увеличивать и печатать 'a'. – Tom
Если вы просто хотите исчерпать память, почему бы просто не выделить массив _massive_? – ajshort