2009-12-28 6 views
6

Вот фраза, которую я слышал много по всей средней школы и университета информатики классов:Как «современные JVM» отличаются от старых JVM?

«Это не является проблемой для современных виртуальных машинах.»

Обычно это было бы обсуждением общих характеристик или стратегий оптимизации. Его всегда рассматривали как своего рода магический окончательный ответ, хотя, как если бы он делал вопросы, о которых больше не стоит думать. И это просто заставляет меня задаться вопросом: каковы различия между прототипными «современными JVM» и более старыми JVM, на самом деле?

+1

Дата штампа на двоичном :-P – TofuBeer

+0

@TofuBeer: Спасибо, капитан Очевидный. Правильный и лаконичный, так что + 1/принято. О, подождите ... – Pops

+0

Связанный с этим вопрос, который объясняет бит бит мусора более подробно: http://stackoverflow.com/questions/2931170/does-variable-null-set-it-for-garbage-collection – Pops

ответ

6

Самым значительным улучшением технологии JVM является компилятор JIT: Just In Time. JIT оптимизирует код при его запуске, тем самым увеличивая прирост производительности, что делает Java (по крайней мере в некоторых доменах) конкурентоспособной с программами C/C++.

Интересное обсуждение преимуществ динамической оптимизации (по мере выполнения кода) и статической оптимизации (во время компиляции) можно найти в разговоре Стива Егге: http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html (что, BTW интересно само по себе).

Другие улучшения JVM, которые не полностью не связаны с JIT, - это более быстрая отправка виртуальных методов как для методов класса, так и для методов интерфейса.

6

Неисправная синхронизация была медленной.
Сбор мусора стал намного быстрее.
Оптимизация точек доступа улучшилась.
Некоторые действительно старые JVMs имели green threads исключительно.

+1

Я собирался говорят, что «современная JVM» является скорее заявлением о низкой производительности прото-JVM, чем заявлением о текущем поколении – Jherico

1

Современный JIT может агрессивно оптимизировать машинный код, основанный на профильную информацию и другую информацию, полученную из байт-код:

  • Машинный код может быть сгенерирован с уровнем оптимизации, полученного от ожидаемого использования (она использовалась лот, возможно, он будет использоваться еще больше). Это очень помогает!
  • Звонки на object.getFoo() могут быть встроены, поэтому содержимое метода помещается непосредственно в сгенерированный код без вызова метода. Это можно сделать рекурсивно и может привести к замене сложного кода только несколькими фактически выполненными инструкциями.
  • Сбор мусора значительно улучшился. Это означает, что в течение длительного времени не расходуется.
Смежные вопросы