Что такое фрейм в команде jstack

Я пытаюсь понять команду Java jstack пройдя через онлайн документ для jstack где сказано:

jstack печатает трассировки стека Java потоков Java для данной Java
файл процесса или ядра или удаленный сервер отладки. Для каждого фрейма Java
полное имя класса, имя метода, ‘bci’ (индекс байт-кода) и строка
номер, если таковой имеется, напечатаны. С опцией -m jstack печатает
и Java, и собственные фреймы всех потоков вместе с ‘pc’
(счетчик команд). Для каждого нативного кадра ближайший нативный символ
‘pc’, если доступно, печатается. Искаженные имена в C ++ не разглашаются.
Чтобы разобрать имена C ++, выходные данные этой команды могут быть переданы
C ++ ФИЛТР.

У меня есть некоторые сомнения, пожалуйста, помогите мне понять эту команду.

1) Является ли файл core просто именем файла, в котором я хочу распечатать трассировку стека, или это
разные? Что такое удаленный отладочный сервер и как мы можем его использовать или настроить?

2) Что такое Java Frame в этом контексте и что такое собственный фрейм потока?

3) Я узнал о программном счетчике раньше, когда изучал микропроцессоры, но является ли это же концептуальное приложение для Java?

4) Что означает ближайший нативный символ к ПК? Кроме того, как c ++ используется в Java, я никогда не сталкивался с c ++, когда изучал Java.

Пожалуйста, уточните, заранее спасибо.

0

Решение

  1. Базовый файл — это дамп ядра работающей (или ранее работавшей) Java-программы, обычно после того, как она аварийно завершилась или вы ее убили. jstack может либо присоединиться к работающей, работающей программе, либо прочитать из дампа памяти.

  2. Кадр — это состояние, связанное с вызовом функции. Каждый раз, когда вы вызываете функцию, появляется новый фрейм, содержащий локальное состояние этой функции (например, локальные переменные). Кадры формируют стек: вызов функции помещает новый кадр в стек, а возвращение из функции выдает всплывающие кадры из стека, и вы продолжаете в следующем кадре, который принадлежит вызывающей стороне. Верхний фрейм содержит данные, к которым текущая точка выполнения программы имеет прямой доступ. Концептуально, фреймы похожи на «области видимости» в блочно-структурированных языках программирования.

  3. Виртуальная машина Java тоже машина, и у нее есть счетчик программ. Это не тот, который вы можете потрогать руками или пролить на себя кофе.

  4. Поскольку JVM является виртуальной, она фактически выполняется с помощью реального машинного кода, который называется «нативным». Итак, у вас есть все то же самое соображение о фреймах, вызовах функций и точках исполнения снова для собственного кода.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]