2013-10-11 4 views
0

Является ли это 32-разрядным/64-разрядным в зависимости от JVM, или это меньше, как нам действительно нужно, что многие возможности для адресов при обращении к функциям?Сколько памяти используется для ссылок функций в объекте Java?

Несомненно, нам никогда не понадобится столько возможностей, сколько количество типов, и в результате число функций никогда не достигнет этих чисел?

+1

Что такое «функция ссылки»? – delnan

+0

Я имею в виду ссылку, которая ссылается на местоположение функции. Я полагаю, что большинство ссылаются на него как на указатель функции, как на C/C++. – newlogic

+1

На Java нет такой вещи (насколько я знаю, по крайней мере). В какой-то будущей версии есть лямбды и друзья, но они реализованы как обычные объекты с помощью метода. Не могли бы вы показать какой-то код, используя такую ​​ссылку на функцию? – delnan

ответ

1

В простейшей реализации используется «реальный»/полный адрес функции, независимо от того, что может быть в рассматриваемой архитектуре (например, виртуальный адрес первой инструкции пролога функции). Так что да, такой указатель функции, вероятно, будет большим. И это хорошо!

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

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