Я прохожу курс по использованию Java Flight Recorder java-flight-recorder-monitoring.
Я скомпилировал java-код из примера (добавив class
и imports
, потому что он не компилировался без них):
import java.util.ArrayList;
import java.util.List;
class TestFlightRecorder {
public static void main(String[] args) {
List<Object> items = new ArrayList<>(1);
try {
while (true){
items.add(new Object());
}
} catch (OutOfMemoryError e){
System.out.println(e.getMessage());
}
assert items.size() > 0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
Потом бегаю по курсу:
C: \ Program Files \ Java \ jdk1.8.0_191 \ bin> java -XX: + UnlockCommercialFeatures -XX: + F lightRecorder -XX: StartFlightRecording = duration = 200s, filename = c: \ am \ out \ flight.j fr - cp c: \ am \ out TestFlightRecorder
Вывод сразу после:
Началась запись 1. Результат будет записан в:
C: \ AM \ out \ flight.jfr
Использование памяти в диспетчере задач Windows для java увеличивается, а затем спустя более 200 секунд:
Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java в TestFlightRecorder.main (TestFlightRecorder.java:12) [jfr] [ERROR] [1014.291] Репозиторий не может быть удален при завершении работы
И результирующий flight.jfr
имеет размер 0 байт. (когда я сделал ту же команду с простым java-классом hello world, был создан flight.jfr размером 125 КБ с «пустой» информацией внутри - я думаю, это связано с тем, что приложение работало так быстро, запись полета еще не началась - и это вопрос не в этой пустоте).
Поиск такой ошибки в Интернете не дал результатов. Почему ошибка, я что-то сделал неправильно, чтобы сделать запись?
Thread.sleep
не должен быть внутриwhile(true)
цикла? Поскольку это ваш код, он устремится к ошибке OOMError, которая, вероятно, нарушит работу JVM настолько, что регистратор полетов не сможет записать пустую информацию в свой файл журнала, отображая ошибку, которую вы видели. - person Aaron   schedule 29.08.2019while(true)
достаточно, чтобы удовлетворить ваши требования, и наличие 1-секундного ожидания, в течение которого список все еще находится в области видимости, вероятно, ухудшит ситуация. - person Aaron   schedule 29.08.2019