Как стать автором
Обновить

Комментарии 2

Можете ли вы представить игру для Android, сделанную в Unity, которая использует больше 64K методов Java? Не удалось это и архитекторам байт-кода Dalvik. Возможно, у них получилось (я не читал спецификации), и винить следует другие элементы тулчейна.

Если вы пройдёте по указанной вами ссылке и найдёте описание инструкций **invoke**, то увидите, что индекс вызываемого метода — 16-битный:
invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB
6e: invoke-virtual
6f: invoke-super
70: invoke-direct
71: invoke-static
72: invoke-interface

A: argument word count (4 bits)
B: method reference index (16 bits)
C..G: argument registers (4 bits each)

Разработчики виртуальной машины решили сэкономить на длине инструкции — очевидно, в угоду меньшего размера и большей скорости выполнения кода. Впрочем, если у вас на мобильном устройстве работает виртуальная машина, вы уже достаточно «позаботились» о скорости выполнения. Благослови Тюринг технологию AOT!
В этой проблеме прекрасно все: и сам факт ограничения в 64К в vm, и то что play services, написанные разработчиками хухле, которые должны быть вкурсе этой проблемы содержат аж 25К методов, и то что вообще получается так что 64К методов не хватает для unity, в которой java когда почти нет
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории