Где я могу узнать о том, как работает управление памятью в Java? - PullRequest
4 голосов
/ 09 января 2009

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

ища в интернете, я нашел только простые учебники по кодированию или информацию о модели памяти java, которая, кажется, о предотвращении параллелизма и в действительности не объясняет управление памятью так, как мне нужно.

Ответы [ 7 ]

4 голосов
/ 09 января 2009

Возможно, вам поможет чтение Спецификации виртуальной машины Java .

Это объясняет, среди прочего, как java работает на виртуальной машине Suns и / или как они должны работать, когда другие реализуют ее (IBM, BEA и т. Д.)

2 голосов
/ 12 июля 2012

Эта ссылка поможет вам понять это намного лучше.

Это PDF, я думаю, из серии лекций. Нашел его в Google, когда я сам пытался разобраться в управлении памятью.

Я еще не просмотрел весь pdf, но я думаю, он должен вам многое рассказать.

http://www.cs.umd.edu/class/spring2006/cmsc433/lectures/gc.pdf

2 голосов
/ 09 января 2009

Я думаю, что стоит определиться со спецификацией языка Java, чтобы посмотреть, отвечает ли она на некоторые ваши вопросы. Я также написал несколько страниц о использовании памяти Java-объектами , которые могут вас заинтересовать, в основном на основе Hotspot. Другие источники включают в себя официальные документы, опубликованные Sun, или другую техническую документацию, подготовленную вашим любимым поставщиком JVM (IBM также вполне разумно представить технические подробности, если вы немного покопаетесь).

Если вы чувствуете себя особенно «жестким ядром», то вы также можете загрузить JDK отладки, который позволяет получить дамп всего кода, сгенерированного компилятором JIT (включите -XX: + PrintOptoAssembly).

Вы также должны спросить себя:

  • Вас действительно волнует, скажем, какие параметры метода заказа записываются в стек? Если ответ «порядок, в котором их вызывает ожидаемый метод», какая разница? (Примечание. Если JIT-компилятор указывает на метод, в некоторых случаях ответом может быть «он не записывает параметры в стек» ...)
  • Можете ли вы найти ответы на основную проблему эмпирически? (Например, если вы действительно хотите знать, «на какую глубину рекурсии я могу пойти с методом, который каждый раз принимает эти параметры и объявляет эти локальные переменные», почему бы просто не написать тестовую программу, чтобы выяснить это из Java?
1 голос
/ 09 января 2009

Этот документ предлагает лучшее введение, которое я видел:

http://www.oracle.com/technetwork/java/memorymanagement-whitepaper-150215.pdf

Как только вы поймете этот документ, вы сможете найти более подробные ресурсы, такие как руководства по настройке ГХ, предоставляемые Sun:

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

0 голосов
/ 09 января 2009

При чтении спецификации JVM имейте в виду, что, хотя она определяет, какая часть памяти Java должна работать, она оставляет определенные области (например, сборку мусора) открытыми для интерпретации, поэтому это также может помочь попытаться найти документацию / спецификации для модель памяти для виртуальных машин, отличных от Suns.

0 голосов
/ 09 января 2009

используйте javap и читайте ByteCode, ваша интуиция поможет вам намного быстрее и лучше.

0 голосов
/ 09 января 2009

Я бы ответил точно так же, как Оскар Рейес, если бы он не был первым. Вы обязательно найдете такие вещи в спецификации VM.

Однако, почему вы хотите знать это так точно, поскольку вы все равно не можете получить доступ к этому хранилищу в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...