"VTBL" - это артефакт языков, которые работают со структурами хранения. То есть в C ++ вы можете с достаточной степенью точности точно определить, как класс будет отображаться в ОЗУ.
Java не имеет дело со структурами хранения, она имеет дело со структурами данных. Вы можете легко использовать структуру хранения в качестве структуры данных, но обратное не так тривиально. Если у вас есть копия журнала BYTE, выпущенная в начале 1991 года, вы даже можете найти статью, в которой я превозносил преимущества отображения структур данных C ++ на структуры хранения, используемые ядром Commodore Amiga OS ROM (Exec). Тогда фактически термин «структура данных» использовался как некий универсальный элемент, так как мы все еще беспокоились о том, как вещи точно поместятся в память.
Структуры данных обычно используются алгоритмами. Структуры хранения более тесно связаны с внутренними реализациями и сериализованными формами. Фактическое выполнение программы требует немного и того и другого, но структуры хранения, лежащие в основе структуры данных Java, должны быть непрозрачными. Это большая часть того, что делает Java «пиши один раз, беги куда угодно». Если вам не нужно беспокоиться о размере и байтовой ориентации вещей, вам не нужно загружать ваше приложение с помощью «пробок» и калькуляторов смещения памяти.
Некоторые языки программирования не любят прямых и циклических ссылок. Java было бы трудно обойтись без них. Однако есть разница между жесткой ссылкой на код и ссылкой на сигнатуру метода, которая привязана к байт-коду и которая (возможно) в конечном итоге будет JIT-скомпилирована в машинный код. Или даже повторно оптимизирован и перекомпилирован, в некоторых из более продвинутых JVMS. Все это сводится к тому, что у вас есть несколько проходов над классом, где один устанавливает словарь, а другой подключает связи. Включая автоматическое наложение, если необходимо.