HotSpot

Для термина «Хот-спот» см. также другие значения.

HotSpot

Тип |  Java Virtual Machine
Разработчики |  Oracle (ранее Sun Microsystems)
Написана на |  C++
Операционная система  |  Кроссплатформенное ПО
Первый выпуск |  1999[1]
Последняя версия |  25.77-b03
Лицензия |  GNU General Public License
Сайт |  openjdk.java.net/groups/…

«HotSpot» — основная виртуальная машина Java (JVM) как для клиентских, так и для серверных компьютеров, выпускаемая корпорацией «Oracle». Для повышения производительности обладает технологиями динамической компиляции JIT и адаптивной оптимизации.

## Содержание

* 1 История
* 1.1 Этимология
* 1.2 Перспективы
* 2 Особенности
* 2.1 JVM-флаги
* 3 Лицензия
* 4 Поддерживаемые платформы
* 4.1 Поддерживаемые Sun Microsystems
* 4.2 Порты от сторонних разработчиков
* 5 См. также
* 6 Примечания
* 7 Ссылки

## История

[править | править код]

«HotSpot», впервые выпущенная 27 апреля 1999 года, изначально разрабатывалась «Longview Technologies» — небольшой компанией, основанной в 1994 году. В 1997 году компанию купила Sun Microsystems[2]. Сначала «HotSpot» использовали как дополнение к «Java 1.2», однако, эта виртуальная машина стала основной с выходом «Java 1.3»[3].

### Этимология

[править | править код]

Эта JVM называется «HotSpot» потому что, выполняя байт-кода «Java», она ищет его «горячие» места (англ. «hot spots») — многократно выполняющиеся. Поиск направлен на оптимизацию их выполнения: выделение им больших ресурсов вместе с уменьшением непроизводительных затрат для выполнения менее ресурсоёмкого кода.

### Перспективы

[править | править код]

«HotSpot» часто называют самой производительной виртуальной машиной Java в своём классе. В теории, — с помощью адаптивной оптимизации, — программа, которая выполняется в этой JVM, может быть более производительной, чем эквивалентная ей программа в машинных кодах[4].

## Особенности

[править | править код]

Виртуальная машина «HotSpot» написана на «C++». Как указано на домашней странице «HotSpot», размер её исходного кода составляет 250 000 строк[5]. «Hotspot» предоставляет следующую функциональность:

* Загрузчик Java-классов;
* Интерпретатор байткода;
* Две версии виртуальной машины — Client и Server;
* Несколько сборщиков мусора;
* Набор вспомогательных библиотек времени выполнения.

Client-версия виртуальной машины характеризуется меньшим временем запуска приложений и меньшим потреблением памяти по сравнению с Server-версией, уступая при этом последней в производительности.

### JVM-флаги

[править | править код]

«HotSpot» поддерживает большое количество аргументов командной строки[англ.] для настройки виртуальной машины при запуске. Некоторые из них — стандартные и поддерживаются другими реализациями JVM, другие же — нет, так как специфичны (опции, которые начинаются с `-X` или `-XX`)[6][7][8][9].

## Лицензия

[править | править код]

13 ноября 2006 года виртуальная машина и JDK от Sun Microsystems были открыты[10] под лицензией GPL v2 (см. Sun’s OpenJDK Hotspot page). Этот код стал частью Java 7.

## Поддерживаемые платформы

[править | править код]

### Поддерживаемые Sun Microsystems

[править | править код]

Что касается JDK, HotSpot на данный момент поддерживается Oracle в операционных системах Microsoft Windows, Linux и Solaris. Поддержка ISAs представлена платформами IA-32, x86-64 и SPARC (только в Solaris).[11]

### Порты от сторонних разработчиков

[править | править код]

Доступны также порты сторонних разработчиков для Mac OS X и других операционных систем Unix. Поддерживается несколько различных аппаратных архитектур, включая x86, PowerPC и SPARC (только в Solaris).

Портирование HotSpot усложнено тем, что данная виртуальная машина написана в основном на C++ с использованием вставок на ассемблере[12]. Чтобы избежать этого, проект IcedTea разработал общий порт интерпретатора HotSpot под названием zero-assembler Hotspot (или просто zero) который практически не содержит ассемблерного кода. Данный порт разрабатывается с целью достижения портируемости HotSpot на различные процессорные архитектуры Linux, что сделает его практически неограниченно портируемым. Код zero-assembler Hotspot используется для всех архитектур, отличных от x86 (PPC, IA64, S390 и ARM), начиная с версии 1.6[13][14][15].

Гари Бенсон (англ. Gary Benson), разработчик IcedTea, в данный момент разрабатывает платформонезависимую реализацию динамической компиляции JIT под названием Shark для HotSpot, с использованием LLVM, в дополнение к zero-assembler Hotspot[16][17].

## См. также

[править | править код]

* Список виртуальных машин Java

## Примечания

[править | править код]

1. ↑ https://web.archive.org/web/thefreelibrary.com/Sun+Announces+Availability+of+the+Java+HotSpot+Performance+Engine;...-a054477747 — 1999.
2. ↑ Sun's Gosling Previews Hotspot Java Virtual Machine (неопр.). ComputerGram (13 февраля 1998). Дата обращения: 25 июля 2010.
3. ↑ Sun Microsystems releases fastest client-side Java platform to date (неопр.). Sun Microsystems (8 мая 2000). Дата обращения: 25 июля 2010. Архивировано из оригинала 3 мая 2012 года.
4. ↑ Lewis, J.P. Performance of Java versus C++ (неопр.) (2004). Дата обращения: 25 июля 2010. Архивировано из оригинала 3 мая 2012 года.
5. ↑ The HotSpot Group (неопр.). Sun Microsystems (2007). — «There are nearly 1500 C/C++ header and source files, comprising almost 250,000 lines of code». Дата обращения: 21 июля 2010. Архивировано из оригинала 3 мая 2012 года.
6. ↑ Java HotSpot VM Options (неопр.). Sun Microsystems. Дата обращения: 8 февраля 2009. Архивировано из оригинала 3 мая 2012 года.
7. ↑ Mocker, Joseph D. A Collection of JVM Options (неопр.) (28 августа 2007). Дата обращения: 20 июля 2010. Архивировано из оригинала 13 октября 2012 года.
8. ↑ Maximovich, Dmitri The most complete list of -XX options for Java 6 JVM (неопр.). Дата обращения: 20 июля 2010. Архивировано из оригинала 30 января 2010 года.
9. ↑ Nutter, Charles My Favorite Hotspot JVM Flags (неопр.) (29 января 2009). Дата обращения: 20 июля 2010. Архивировано из оригинала 3 мая 2012 года.
10. ↑ Sun Opens Java (неопр.). Sun Microsystems (13 ноября 2006). Дата обращения: 20 июля 2010. Архивировано из оригинала 3 мая 2012 года.
11. ↑ Supported System Configurations (неопр.). Oracle. Дата обращения: 1 января 2011. Архивировано из оригинала 3 мая 2012 года.
12. ↑ Gary, Benson Gary's guide to porting IcedTea (неопр.) (6 ноября 2007). Дата обращения: 21 июля 2010. Архивировано из оригинала 3 мая 2012 года.
13. ↑ Gary, Benson 1st February 2008 (неопр.) (1 февраля 2008). Дата обращения: 21 июля 2010. Архивировано из оригинала 3 мая 2012 года.
14. ↑ Andrew, Haley Making zero-assembler the default on ppc (неопр.) (31 января 2008). Дата обращения: 21 июля 2010. Архивировано из оригинала 3 мая 2012 года.
15. ↑ Lilian, Angel IcedTea 1.6 Released with Zero-assembler and JNLP support! (неопр.) Red hat (13 февраля 2008). Дата обращения: 21 июля 2010. Архивировано из оригинала 3 мая 2012 года.
16. ↑ Gary, Benson 31 March 2008 (неопр.). Red hat (21 июля 2010). Дата обращения: 30 мая 2008. Архивировано из оригинала 3 мая 2012 года.
17. ↑ Gary, Benson 28 May 2008 (неопр.). Red hat (28 мая 2008). — «Shark is a platform-independent JIT for HotSpot, to complement the zero-assembler interpreter we’ve been using». Дата обращения: 21 июля 2010. Архивировано из оригинала 3 мая 2012 года.

## Ссылки

[править | править код]

* Sun’s OpenJDK Hotspot page
* Sun’s HotSpot information page
* HotSpot performance whitepaper
* A list of HotSpot VMOptions
* The Java Virtual Machine Specification
* The history of the original Strongtalk/HotSpot team
* Sun announces availability of the Java Hotspot Performance Engine

Виртуальные машины Java (сравнение[англ.])

Sun, Oracle|

* HotSpot
* KVM
* OpenJDK
* Maxine[англ.]

Основные реализации|

* JamVM
* Jikes RVM[англ.]
* IBM J9

Встраиваемые|

* CEE-J (Skelmir)
* JamaicaVM
* Mika VM
* Mysaifu
* Squawk (Sun)

Другие|

* CACAO
* IcedTea[англ.]
* JX
* ещё…

Неподдерживаемые|

* Apache Harmony
* Dalvik
* Excelsior JET[англ.]
* GCJ
* IKVM.NET
* JRockit
* Kaffe
* Microsoft JVM[англ.]
* SableVM
* Jupiter[англ.]
* ещё…[англ.]