Как воспроизвести ошибку EXCEPTION_STACK_OVERFLOW в Java

Как воспроизвести ошибку EXCEPTION_STACK_OVERFLOW в Java.

PS: я не говорю об ошибке StackOverflowError в Java, которая изящно закрывает JVM. Я говорю об EXCEPTION_STACK_OVERFLOW в error.log, что приводит к сбою JVM.


person Sandeep Jindal    schedule 08.07.2011    source источник
comment
пожалуйста, дважды проверьте свой PS, я думаю, что между утра и разговором не хватает крошечного not ...   -  person Andreas Dolk    schedule 08.07.2011
comment
Большинство EXCEPTION_STACK_OVERFLOW ошибок, которые я обнаружил до сих пор, происходят в машинном коде за пределами JVM ... Если бы была одна внутри, это была бы ошибка, и ее нужно было бы исправить.   -  person Andreas Dolk    schedule 08.07.2011
comment
Не точный ответ, но кое-что есть на stackoverflow.com/questions/65200/how-do -you-crash-a-jvm   -  person Sandeep Jindal    schedule 08.07.2011


Ответы (3)


Большинство EXCEPTION_STACK_OVERFLOW ошибок, которые я обнаружил до сих пор, происходят в машинном коде за пределами JVM. Сбой внутри JVM заслуживает отчета об ошибке и будет исправлен. Или вам нужен (неизвестный) эксплойт?

Таким образом, наиболее простым и надежным способом было бы написать собственную библиотеку с некоторым кодом, который вызывает сбой JVM, и вызвать это с помощью JNI.

(общий ответ, я вообще-то не знаю, как это сделать. Нельзя сделать только с java-кодом;))

person Andreas Dolk    schedule 08.07.2011
comment
+1. Я могу сделать только +1, но хотел сделать +100 для подтверждения моего понимания. Большинство других упомянули о StackOverFlowError! - person Sandeep Jindal; 08.07.2011

public static void stackoverflow()
{
     stackoverflow();
}

Звоните и наслаждайтесь: D

person Martijn Courteaux    schedule 08.07.2011
comment
Это приведет к сбою StackOverflowError, а не к сбою JVM! - person Sandeep Jindal; 08.07.2011

Ударный стек:

public static void main(String[] args) {
    main(null);
}

Взрывная куча:

public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    while(true) list.add(new String("boom"));
}
person Bohemian♦    schedule 08.07.2011
comment
Ничто из вышеперечисленного не приведет к сбою JVM. Первый вызовет StackOverflowError, а второй вызовет OutOfMemoryError. - person Sandeep Jindal; 08.07.2011