Где я могу найти информацию о внутренней работе JVM от Sun? - PullRequest
3 голосов
/ 14 августа 2011

Как разработчик, я хочу знать, сколько стоит вызов виртуального метода по сравнению с интерфейсным методом.Теперь я знаю, почему invokeinterface может быть медленнее, чем invokevirtual, но мне интересно, принял ли Sun новые механизмы в последних версиях выпущенных ими JVM, которые улучшили invokeinterface.Как я могу найти такую ​​информацию?

1 Ответ

0 голосов
/ 14 августа 2011

Oracle, которая приобрела Sun, размещает на своем сайте старые официальные документы Sun о JVM HotSpot, которые можно найти здесь:

http://java.sun.com/products/hotspot/docs/whitepaper/Java_HotSpot_WP_Final_4_30_01.html

Что касается вашего первоначального вопроса о invokevirtual против invokeinterface, Sun предприняла много очень агрессивных оптимизаций производительности, чтобы попытаться улучшить это. Один из многих методов, которые они используют, называется полиморфным встроенным кэшированием и может значительно упростить накладные расходы времени выполнения интерфейсных диспетчеризаций до уровня, равного или лучше, чем регулярные invokevirtual диспетчеризаций. Идея состоит в том, чтобы отслеживать небольшую таблицу возле каждого сайта вызова, отслеживая, какие типы часто используются на сайте вызова. Всякий раз, когда вызывается метод интерфейса, объект, для которого вызывается метод, может затем сравнивать свой тип с известными типами, и, если он соответствует, вызов может быть сделан быстро путем поиска в небольшом кеше, какой метод следует вызывать.

Кроме того, я считаю, что HotSpot использует динамический анализ, чтобы попытаться доказать, что в определенных программных точках тип объекта, на который ссылается указатель интерфейса, в точности относится к какому-то конкретному типу. Если это так, то вызов может быть полностью встроенным или может быть разрешен без необходимости какого-либо дополнительного динамического поиска.

Надеюсь, это поможет!

...