Вот небольшой код, который я пытаюсь сделать. Эта программа занимает много времени для выполнения. Во время работы, если я пытаюсь убить его с помощью кнопки завершения в eclipse, он возвращает Terminate Failed
. Я могу убить его с терминала с помощью kill -9 <PID>
.
Но, когда я не печатаю результат переменной в последней строке программы (пожалуйста, проверьте прокомментированную часть кода), программа немедленно выйдет из программы.
Мне интересно:
-
Почему требуется время для выполнения, когда печатается значение результата?
Обратите внимание: если я не печатаюvalue
, тот же цикл сразу заканчивается. -
Почему eclipse не может убить программу?
Обновление 1: Кажется, JVM оптимизирует код во время выполнения (не во время компиляции). Этот поток полезен.
Обновление 2:
Когда я печатаю значение value
, jstack <PID>
не работает. Работает только jstack -F <PID>
. Любая возможная причина?
public class TestClient {
private static void loop() {
long value =0;
for (int j = 0; j < 50000; j++) {
for (int i = 0; i < 100000000; i++) {
value += 1;
}
}
//When the value is being printed, the program
//is taking time to complete
System.out.println("Done "+ value);
//When the value is NOT being printed, the program
//completes immediately
//System.out.println("Done ");
}
public static void main(String[] args) {
loop();
}
}