Информация файла Java .class уже находится в оперативной памяти, когда она генерируется.Так почему jvm должен иметь специальную область метода? - PullRequest
0 голосов
/ 06 октября 2018

Когда мы пишем код в блокноте или любой IDE, вся информация преобразуется в биты в оперативной памяти.И файл .class после компиляции уже содержит инструкции, которые может понять jvm.Эта информация также уже находится в оперативной памяти при создании файла .class.

Так зачем jvm нужно специальное пространство памяти в оперативной памяти, называемое областью метода для «загрузки данных класса». Я узнал, что в области метода есть метаданные, относящиеся к классу, который мы выполняем.Но зачем вам больше памяти, когда у нас уже есть информация о файле .class в оперативной памяти, когда мы ее запускаем.

Это просто для более быстрых вычислений?Или информация о области метода полностью отличается от того, что я понимаю.? 1009

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Я думаю, что вас смущает тот факт, что современные операционные системы имеют систему виртуальной памяти.Когда вы компилируете код Java, сгенерированные байт-коды будут храниться в физической памяти во время компиляции.Однако у компилятора есть собственное виртуальное адресное пространство.Система виртуальной памяти отображает физические адреса на специфичные для процесса виртуальные адреса.Это также гарантирует, что другие процессы не смогут считывать или изменять физическую память, используемую другими процессами (если вы не используете специальное устройство, называемое общей памятью).

Когда JVM работает, она имеет свое собственное адресное пространство виртуальной памяти и загружает всю информацию файла класса в это адресное пространство.Чтобы все было организовано, эти данные помещаются в область метода.

Теоретически, вы можете просто прочитать скомпилированный код непосредственно из области памяти, используемой процессом компилятора, но сделать эту работу (и необычную ситуацию) будет настолько сложно, что это не будет сделано таким образом.

0 голосов
/ 06 октября 2018

Когда мы пишем код в блокноте или любой IDE, вся информация преобразуется в биты в оперативной памяти.

На каком-то этапе все данные на компьютере являются битами в оперативной памяти.

И файл .class после компиляции уже содержит инструкции, которые может понять jvm.Эта информация также уже находится в ОЗУ при создании файла .class.

В ОЗУ ее нет, пока не создан файл класса.Данные в файле класса - это то, что находится в ОЗУ, когда код компилируется.

Так зачем jvm понадобиться специальное пространство памяти в ОЗУ, называемое областью метода для «загрузки данных класса».

Это должно быть где-то, и поскольку у него жизненный цикл, отличный от других типов данных, имеет смысл управлять им по-другому.

Я узнал, что область метода имеетметаданные, относящиеся к классу, который мы выполняем.Но зачем вам больше памяти, когда у нас уже есть информация о файле .class в ОЗУ, когда мы ее запускаем.

Возможно, вам придется распаковать информацию или превратить ее в собственный код для оптимизации.

Это просто для более быстрых вычислений?

Да, каждый раз перечитывать файл .class очень медленно.

Или информация об области метода полностью отличается от того, что я понимаю .?

Хранит информацию, полученную из файлов .class, а также информацию о том, как используются методы в классе.

...