Assembler для java - Студенческий научный форум

XI Международная студенческая научная конференция Студенческий научный форум - 2019

Assembler для java

Абазов А.А. 1, Абрамова О.Ф. 1
1Волжский политехнический институт (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

В настоящее время язык программирования Java имеет большую популярность среди программистов. Язык активно развивается, появляются новые функции и возможности, увеличивающие производительность платформы. В связи с этим следует рассмотреть возможность взаимодействия java и низкоуровневого машинного кода, с целью оптимизации реализуемых программных продуктов.

Для того чтобы разобраться во взаимодействии java и ассемблера, нужно понимать принципы, лежащие в основе этих двух языков программирования. Java программы запускаются на специальной виртуальной java-машине, что позволяет создавать кроссплатформенные и безопасные программы. Преимуществом же ассемблера является низкоуровневый доступ к аппаратуре, позволяющий писать быстродействующие, занимающие малое количество памяти, программы. Разумеется, в данном случае программный код будет сильно зависеть от целевой платформы.

Устройство Java приложений

Как было указано выше, для запуска Java приложений требуется специальная Java машина, способная исполнять байт-код java. Из исходного текста Java-программы компилятором Java создается байт-код, который в свою очередь исполняется на Java Virtual Machine . Во многих java машинах совместно с интерпретатором байт-кода для повышения быстродействия используется JIT-компиляция часто исполняемых частей байт-кода в машинный код.

Цели совмещения java и ассемблера

Использование ассемблера совместно с языками высокого уровня несет в себе несколько очевидных преимуществ:

• Оптимизация.

С целью оптимизации код, реализующий наиболее критичные в отношении производительности части алгоритма, пишется вручную на ассемблере. Это позволяет программисту в полной мере использовать свою изобретательность и мощности вычислительной машины, не ограничиваться конструкциями компилятора.

• Получение доступа к специфичным процессорным инструкциям.

Некоторые процессоры поддерживают специальные инструкции, такие как test-and-set и сравнение с обменом— инструкции, которые могут быть использованы для реализации примитивов синхронизации и блокировок. Подавляющее большинство современных процессоров имеют идентичные или схожие инструкции, так как без них нельзя обойтись при реализации многозадачности.

• Системные вызовы.

Так как языки программирования высокого уровня довольно редко предоставляют прямую возможность делать системные вызовы, для этих целей используется ассемблерный код

Допустим существует проект, написанный на java и с течением времени ставший требовать оптимизации. Или же требуется написать программу, функционал которой в подавляющем большинстве случаев идеально подходит под предоставляемые java возможности, но требующий оптимизации в некоторых немногочисленных узких местах.

JavaNativeInterface

В большинстве популярных высокоуровневых языков программирования можно было бы воспользоваться ассемблерными вставками. Но в java у нас нет возможности вставить inline-функцию с машинным кодом. Одним из способов обойти данную проблему является Java Native Interface

Java Native Interface — стандартный механизм для запуска кода под управлением виртуальной машины Java, который написан на Ассемблере или С/С++ и скомпонован в виде динамических библиотек, что позволяет не использовать статическое связывание. Это дает возможность вызывать подпрограммы, написанные на ассемблере из программ на Java, и наоборот.

При помощи этого механизма появляется возможность взаимодействия байт-кода Java с системным или прикладным платформенно-ориентированным кодом, запущенным непосредственно под управлением различных операционных систем.

Заключение

Java программы рассчитаны на переносимость и безопасность, а не на быстродействие и экономию памяти, тем более что код, сформированный java компилятором исполняется не напрямую, а на виртуальной машине. В связи с этим ясно прослеживается проблема во взаимодействии высокоуровневого Java и низкоуровневого ассемблера. Но все же при потребности запустить машинный код из java программ для оптимизации или получения доступа к возможностям, закрытым для высокоуровневых языков, существует ряд инструментов, одним из которых является Java Native Interface.

Библиографические ссылки

Абрамова О.Ф. Обзор алгоритмов масштабирования растровой графики [Электронный ресурс] / О.Ф. Абрамова, А.Е. Иванов, А.Н. Инкин // European Student Scientific Journal : электрон. науч. журнал / РАЕ. - 2016. - № 2

Рыбанов А.А. Анализ существующего программного обеспечения в области учёта ГСМ [Электронный ресурс] / А.А. Рыбанов, И.А. Возжин // Форум молодых учёных : междунар. науч.-практ. периодическое сетевое издание. - 2017. - № 5

Лясин, Д.Н. Объектно-ориентированный анализ и проектирование программных систем: учеб. пособ.(гриф) . Доп. УМО вузов по университетскому политехническому образованию / Д.Н. Лясин, О.Ф. Абрамова; ВПИ (филиал) ВолгГТУ. - Волгоград, 2015. - 99 с.

Бородай С.С. Конструирование программно-информационной системы оценки метрических характеристик физических схем реляционных баз данных [Электронный ресурс] / С.С. Бородай, А.А. Рыбанов // Постулат : электрон. науч. журнал. - 2017. - № 5 . – 9 с.

Электронный ресурс: https://habr.com/company/jugru/blog/347200/

Просмотров работы: 110