Как вы терпите крах JVM? - PullRequest
140 голосов
/ 15 сентября 2008

Я читал книгу о навыках программирования, в которой автор спрашивает интервьюируемого: «Как ты разбил JVM?» Я думал, что вы можете сделать это, написав бесконечный цикл for, который в конечном итоге израсходует всю память.

У кого-нибудь есть идеи?

Ответы [ 25 ]

1 голос
/ 25 июня 2016

Кратчайший? Используйте класс роботов, чтобы вызвать CTRL + BREAK. Я заметил это, когда пытался закрыть свою программу, не закрывая консоль (у нее не было функции выхода).

0 голосов
/ 27 марта 2019

Это считается?

long pid = ProcessHandle.current().pid();
try { Runtime.getRuntime().exec("kill -9 "+pid); } catch (Exception e) {}

Работает только для Linux и Java 9.

По какой-то причине я не получаю, ProcessHandle.current().destroyForcibly(); не убивает JVM и выдает java.lang.IllegalStateException с сообщением уничтожение текущего процесса не разрешено .

0 голосов
/ 15 сентября 2008

Если вы измените этот бесконечный цикл for на рекурсивный вызов той же функции, вы получите исключение переполнения стека:

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

public void causeStackOverflow() {
    causeStackOverflow();
}
0 голосов
/ 31 января 2016

Если «Crash» - это что-то, что прерывает jvm / программу от нормального завершения, то это может сделать исключение Un-handled.

public static void main(String args[]){
   int i = 1/0;
   System.out.print(i); // This part will not be executed due to above  unhandled exception
  }

Итак, это зависит от типа CRASH?!

0 голосов
/ 28 апреля 2009

Я делаю это сейчас, но не совсем уверен, как ... :-) JVM (и мое приложение) иногда просто полностью исчезают. Нет ошибок, ничего не регистрируется. Переходит от работы к полной неработоспособности мгновенно без предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...