>> но байткод может быть докомпилирован на конечной машине, уже с учетом его
>> архитектуры и соответственно - более оптимально.
> Просто на пальцах рассудите: любая VM обладает неким _универсальным_ псевдокодом, который
> можно "отобразить" на таргет архитектуру. Т.е. он в принципе ýже, чем
> любая из железок! (наибольший общий делитель) Вопрос: как вы собрались обгонять
> нативные приложения, не используя полную мощь ЦПУ?? Одни SSE* чего стоят! кхм, C тоже оперирует некой виртуальной машиной, являющейся общим знаменателем кучи разношерстных архитектур 80-х. Компилятор уже раскладдывает код с учетом конкретной архитектуры комманд, x86, x64, sparc, IA64, ...
Джиту в отличие от компилятора доступна информация не о конкретной арихтектуре КОММАНД, а о конкретной архитектуре ПРОЦЕССОРА, включающую в себя размер, кол-во и организацию кешей, регистров, конвеееров и прочей приблудни, которую он может задействовать. Понятное дело, чтобы в полную силу задействовать, например, кеш надо на уровне архитектуры вашей программы (исходного кода) учитывать влияние локальности данных и называется это DDD - Data Driven Design. Но при одном и том же исходном коде JIT *может* дать лучший код, так как у него больше информиации для оптимизации.
Еще один источник оптимизации - знание потока исполнения. JIT может встраивать виртуальные вызовы, так как знает что конкретно вызывается. А встроенный виртуальный метод, вызывающийся в цикле может дать хороший прирост производительности.
> Кроме того, есть ещё трюки типа выравнивания, размер кэша 2 уровня и прочая хрень - VM просто опухнет, учитывавши бенефиты каждой платформы!
не сравнивайте апельсины с яблоками: сложность реализации, причем не концептуальная, а техническая, связанная с большим объемом работы и возможность выравнивания - это разные вещи.
Приведу небольшой пример, IPP (Intel Performance Primitives) построенна так, что в самом начале она определяет архитектуру проца и расставляет указатели на функции, оптимизированные под конкретный проц или на generic x86, если не поределила или пользователь (программер) забыл вызвать в самом начале соответствующую функцию определения. performance при использовании конкретного проца вырастает в разы, почему-то, давно это было, у меня в голове крутится цифра в 10 раз, но я могу путать. Но прирост в 2-3 раза - это точно.
Аналогично может поступать jit.
> Кроме того, есть ещё трюки типа выравнивания, размер кэша 2 уровня и
> прочая хрень - VM просто опухнет, учитывавши бенефиты каждой платформы!
> Вобщем, не надо фапать на JIT, успокаивая себя рекламными лозунгами - мы
> же всё-таки инженеры и должны думать головой. Да?