4

Я интересно, как это происходит: как программа Java отображается на процесс ОС (как показано на Linux ниже):
borrowed from: linuxjournal.comОтображение программы Java в процессе операционной системы

В C, это прямая связь в том, как написана программа и как весь стек вызовов продолжается в ОС. Мне было интересно, как достигается отображение на Java? Используется ли метод meth(), вызываемый объектом: obj, просто перевести на поиск адреса obj.meth() & с последующим стекем, который используется так, как он есть в C?

Заранее благодарен!

Редактировать: Мне также было бы интересно узнать модель, которую используют другие языки ООП (C++, Python и т. Д.).

+0

Обратите внимание, что даже для C данное изображение уже является серьезным упрощением. Например, не обязательно только одна куча (наличие одной кучи - неплохая идея, если у вас много потоков, которые хотят выделить память), тогда есть данные, специфичные для потока, и так далее. Дьявол в деталях, и если вы думаете о том, насколько сложна даже простая C-среда выполнения, просто представьте, как выглядит JVM :) – Voo

+0

Конечно, я просто хотел обсудить простой случай с одним потоковым процессом :) –

ответ

4

Это довольно сложная проблема. Вот довольно хорошо article по этой теме. Короче говоря, Java получил два режима выполнения, которые чрезвычайно влияют на макет памяти.

  1. Некоторый код выполняется intepreter
  2. Некоторые кода компилируются в машинный код для лучшей производительности.

Просмотреть эту страницу вики: http://en.wikipedia.org/wiki/Just-in-time_compilation.

И JVM получил больше типа области памяти, как завивки-ген, память для JIT и т.д.

Это хорошо обсуждался в других потоках:

  1. java and memory layout
  2. jdk1.6 memory layout
+2

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

1

Большинство Java JVM - это простые программы на языке C. Таким образом, картина будет такой же, как и файл первого класса, который интерпретируется/выполняется.

После этого это зависит от реализации JVM. Обычно они используют хранилище стека для отслеживания информации типа управления, например, какие классы загружаются, какие потоки запускаются и т. Д. Для реального «программного» хранилища интерпретатор и сборщик мусора будут использовать простой «malloc»/«mfree» для выделять и освобождать память плюс некоторые довольно сложные структуры управления, чтобы позволить сборщику мусора функционировать.

Смежные вопросы