Сообщения

Показаны сообщения с ярлыком "повышение производительности JVM"

Повышение производительности Java Hotspot VM: escape анализ

Изображение
Escape анализ - это метод, с помощью которого Java HotSpot Server Compiler может анализировать область использования нового объекта и решать, следует ли размещать объект в куче Java. Escape анализ поддерживается и включается по умолчанию в Java SE 6u23 и более поздних версиях. Escape состояние объекта, основанное на escape анализе, может быть одним из следующих состояний: GlobalEscape: объект экранирует метод и поток. Например, объект хранится в статическом поле, хранится в поле экранированного объекта или возвращается как результат текущего метода. ArgEscape: объект передается в качестве аргумента или на него ссылается аргумент, но он не экранируется глобально во время вызова. Это состояние определяется путем анализа байт-кода вызываемого метода. NoEscape: объект является скалярным заменяемым объектом, что означает, что его размещение может быть удалено из сгенерированного кода. После escape анализа серверный компилятор исключает скалярные заменяемые выделения объектов и связ...

Повышение производительности Java Hotspot VM: сжатые нулевые указатели на обычные объекты

Изображение
Когда JVM использует сжатые обычные указатели объектов (oops) в 64-разрядном процессе JVM, программное обеспечение JVM отправляет запрос операционной системе на резервирование памяти для кучи Java, начиная с нулевого виртуального адреса. Если операционная система поддерживает такой запрос и может зарезервировать память для кучи Java по нулевому виртуальному адресу, то используются сжатые значения, основанные на нуле. Когда используются сжатые значения, основанные на нуле, 64-битный указатель может быть декодирован из 32-битного смещения объекта без включения базового адреса кучи Java. Для размеров кучи менее 4 гигабайт программное обеспечение JVM может использовать смещение байта вместо смещения объекта и, таким образом, также избежать масштабирования смещения на 8. Соответственно, эффективно кодирование 64-битного адреса в 32-битное смещение. Для кучи Java размером до 26 гигабайт операционные системы Linux и Windows обычно могут выделять кучу Java по нулевому виртуальному адресу. ...

Повышение производительности Java Hotspot VM: сжатый указатель на обычный объект

Изображение
Обычный указатель объекта (oop, ordinary object pointer) для Java Hotspot - это управляемый указатель на объект. Как правило, oop имеет тот же размер, что и собственный указатель компьютера, который является 64-разрядным в системе LP64. В системе ILP32 максимальный размер кучи составляет менее 4 гигабайт, что недостаточно для многих приложений. В системе LP64 куча, используемая данной программой, может быть примерно в 1,5 раза больше, чем при работе в системе ILP32. Это требование связано с расширенным размером управляемых указателей. Память стоит недорого, но в наши дни пропускная способность и кэш ограничены, поэтому нежелательно значительно увеличивать размер кучи и получать только более 4 ГБ. Управляемые указатели в куче Java указывают на объекты, которые выровнены по 8-байтовым границам адресов. Сжатые операции представляют управляемые указатели (во многих, но не во всех местах программного обеспечения виртуальной машины Java (JVM)) в виде 32-битных смещений объектов от 64-битног...

Повышение производительности Java Hotspot VM: Graal, AOT компиляция

Изображение
Graal: основанный на Java JIT-компилятор Graal - это высокопроизводительный оптимизирующий, just-in-time (JIT) компилятор, написанный на Java, который интегрируется с Java HotSpot VM. Это настраиваемый динамический компилятор, который вы можете вызывать из Java. Некоторые из особенностей и преимуществ Graal включают в себя: Гибкие спекулятивные оптимизации Лучше встраивание (inlining) Частичный escape анализ Преимущества инструментов Java и IDE поддержка Метациркулярный подход, обеспечивающий более жесткий контроль генерации кода Вы можете использовать Graal и в статическом контексте. Статический компилятор Ahead of Time основан на платформе Graal. Graal является частью сборки JDK и поставляется как внутренний модуль, jdk.internal.vm.compiler. Он связывается с JVM с помощью интерфейса компилятора JVM (JVMCI). JVMCI также является частью сборки JDK и содержится во внутреннем модуле: jdk.internal.vm.ci. Чтобы включить Graal в качестве JIT-компилятора, используйте следующую о...

Повышение производительности Java Hotspot VM: многоуровневая компиляция

Изображение
Многоуровневая компиляция , представленная в Java SE 7, обеспечивает скорость запуска клиентской виртуальной машины на виртуальной машине сервера. Без многоуровневой компиляции виртуальная машина сервера использует интерпретатор для сбора информации о методах профилирования, которая отправляется компилятору. При многоуровневой компиляции виртуальная машина сервера также использует клиентский компилятор для генерации скомпилированных версий методов, которые собирают информацию о профилировании. Скомпилированный код значительно быстрее, чем интерпретатор, и программа выполняется с большей производительностью на этапе профилирования. Зачастую запуск происходит быстрее, чем скорость запуска клиентской виртуальной машины, поскольку окончательный код, созданный серверным компилятором, может быть доступен на ранних этапах инициализации приложения. Многоуровневая компиляция также может обеспечить лучшую пиковую производительность по сравнению с обычной серверной виртуальной машиной, поскольку ...

Повышение производительности Java Hotspot VM: компактные строки

Изображение
Функция компактных строк вводит внутреннее представление строк с эффективным использованием пространства. Данные из разных приложений показывают, что строки являются основным компонентом использования кучи Java и что большинство объектов java.lang.String содержат только символы Latin-1. Такие символы требуют только одного байта памяти. В результате половина пространства во внутренних символьных массивах объектов java.lang.String не используется. Функция компактных строк, представленная в Java SE 9, сокращает объем занимаемой памяти и снижает активность по сбору мусора. Эта функция может быть отключена, если вы наблюдаете проблемы снижения производительности в приложении. Функция компактных строк не представляет новых общедоступных API или интерфейсов. Она изменяет внутреннее представление класса java.lang.String из массива символов UTF-16 (два байта) в байтовый массив с дополнительным полем для идентификации кодировки символов. Другие связанные со строками классы, такие как Abstract...