Вот фраза, что я слышал много всюду по занятиям по информатике средней школы и университета:
"Это не проблема для современного JVMs".
Обычно это подходило бы в дискуссиях о стратегиях оптимизации или общей производительности. Это всегда рассматривали как своего рода волшебный окончательный ответ, тем не менее, как будто это делает проблемы больше не стоящими взглядов о. И это просто приводит меня задаваться вопросом: каковы различия между формирующей прототип "современной JVM" и более старым JVMs, действительно?
Самое значительное улучшение в технологии JVM - компилятор JIT: Just In Time. JIT оптимизирует код в процессе работы, тем самым получая огромный прирост производительности, что делает Java (по крайней мере, в некоторых областях) конкурентоспособной с программами на Си/Си++.
Интересную дискуссию о преимуществах динамической оптимизации (в процессе работы кода) в сравнении со статической оптимизацией (во время компиляции) можно найти в выступлении Стива Йегге: http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html (что, собственно, BTW интересно).
Другие улучшения JVM, которые не совсем не связаны с JIT, это более быстрая диспетчеризация виртуальных методов, как для методов класса, так и для методов интерфейса.
. Раньше неконтролируемая синхронизация была медленной.
Сбор мусора стал намного быстрее.
Оптимизация горячих точек стала лучше.
Некоторые действительно старые JVM имели только зеленые потоки .
Современный JIT может агрессивно оптимизировать машинный код на основе профилирующей информации и другой информации, полученной из байтового кода: