2009-07-17 6 views
6

Со временем JVM от Sun и JIT стали довольно умными. Вещи, которые раньше были общеизвестными, как необходимая микро-оптимизация, больше не нужны, потому что вас заботят о вас.Smart JVM и JIT Micro-Optimizations

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

Какие еще умные микрооптимизации делают JVM или JIT для вас?

EDIT: Я создал это сообщество wiki; Я бы хотел собрать их со временем.

ответ

6

Это не впечатляет. Все это вещи, которые вы делаете в C++ (конечно, в той же степени, что и в Java). Имейте в виду, что ранние версии Java начали «медленную» репутацию, не имея этих вещей, и мы продолжаем совершенствовать значительно со временем. Это все еще большая область исследований.

+0

хорошо java может быть умным, но он по-прежнему использует много ресурсов – Roch

+2

@mnml это меньше, чем мнение популярного. чтобы создать объект, я думаю, что он имеет дело с чем-то вроде двух или трех инструкций. да что-то вроде C++, как правило, быстрее, но «ресурсы» - это не только процессор и память; это тоже человеческие часы. оборудование дешево, люди дороги. в долгосрочной перспективе java часто выигрывает в производительности, потому что его JIT поражает и оптимизирует приложение больше, чем может когда-либо мечтать о приложениях на C++. –

+1

@ Alex, я хотел бы дать вам репутацию, чтобы указать, что люди - это ресурсы. Как страшно, как верить в это. Ваше время в качестве сотрудника часто будет стоить компании больше денег, чем скажем, чтобы получить дополнительный терабайт на жестком диске или улучшить процессор в веб-браузере. –

3

Java умнее на встраивание, как это может

  • встроенный код доступен только во время выполнения или даже динамически.
  • встроенные виртуальные методы (до двух одновременно)
  • выполнить анализ утечки на встроенных методах и методах, в которые они были привязаны. (Гораздо труднее сделать в C++)