Почему виртуальная машина Java помогает вашему коду работать лучше

Вы в настоящее время обсуждаете, использовать ли Java для вашего следующего приложения, или использовать нативные наборы инструментов и фреймворки? Хотели бы вы знать, какие преимущества предоставляет Java для нативного программирования для приложения? Читай дальше что бы узнать!

Что такое родное приложение?

Нативное приложение — это программа, написанная специально для операционной системы (ОС) и, возможно, для конкретного оборудования, на котором работает эта ОС. Он в основном написан на таком языке, как C / C ++. Исходный код C / C ++ компилируется в объектную форму с использованием компилятора, который затем собирается в исполняемый файл путем связывания необходимых библиотек. Программа, созданная таким образом, будет работать на определенном оборудовании и ОС, для которой она построена, но может не работать должным образом в других системах.

Подготовка собственного исполняемого файла

Почему Native Applications не переносима?

Компилятор для языка, такого как C / C ++, переводит операторы исходного кода на машинный язык для целевого процессора. Когда вы пытаетесь запустить этот код на другом процессоре, программа может работать некорректно (или работать вообще), поскольку инструкции на машинном языке в скомпилированном коде могут не поддерживаться этим процессором.

Кроме того, новая операционная система может отличаться от исходной и может даже не распознавать программный файл как исполняемый файл. Это происходит из-за разных форматов файлов, используемых для исполняемых файлов в разных операционных системах (таких как Windows, Linux, MacOS и т. Д.).

Переносимость — такая большая проблема с нативными приложениями, что простое обновление компилятора до следующей версии может привести к серьезным изменениям. Возможно, ваш код должен быть исправлен для работы с новым компилятором. Таким образом, разбрызгивание исходного кода с тем, что известно как IFDEF операторы для изоляции аппаратного, ОС или компилятора обходные пути являются общими.

Ниже приведен небольшой фрагмент кода из библиотеки сжатия BZLib, который иллюстрирует использование IFDEFs чтобы выделить особенности платформы:

#ifdef _WIN32
# include
# ifdef small
/* windows.h define small to char */
# undef small
# endif
# ifdef BZ_EXPORT
# define BZ_API(func) WINAPI func
# define BZ_EXTERN extern
# else
/* import windows dll dynamically */
# define BZ_API(func) (WINAPI * func)
# define BZ_EXTERN
# endif
#else
# define BZ_API(func) func
# define BZ_EXTERN extern
#endif

Переносимость исходного кода в операционных системах

Эту ситуацию можно до некоторой степени облегчить, перекомпилировав исходный код C / C ++ для нового процессора. Однако операционная система для нового процессора может отличаться. И исходный код может не скомпилироваться без изменений, будь то основных или второстепенных. Даже незначительные изменения в версиях операционной системы могут потребовать некоторых изменений исходного кода.

И когда вы рассматриваете разные операционные системы, такие как Windows и Linux / UNIX, переносимость — это совершенно новая игра с мячом. Если вы не используете инструментарий или инфраструктуру, которая полностью изолирует вас от операционной системы, переносимость исходного кода невозможна. Это связано с тем, что интерфейс операционной системы в этих системах совершенно другой. Если вы, в самых отдаленных уголках своего кода, используете какие-либо примитивы операционной системы напрямую, то ваш код не будет переносимым между этими различными операционными системами.

Чем отличается Java?

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

Виртуальная машина, исполняющая код

Как создаются Java-приложения?

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

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

Сборка программ на Java

Каковы преимущества виртуальной машины Java?

Как упоминалось ранее, виртуальная машина Java предоставляет виртуальному представлению операционной системы и аппаратного обеспечения программисту приложения. Это виртуальное представление имеет форму различных интерфейсов и методов и служит для того, чтобы изолировать прикладного программиста от различий в ОС хоста и базовом оборудовании. Таким образом, программист приложения может получить доступ к таким средствам, как Windowing Toolkit, работа в сети, 3D-графика, несколько процессоров и т. Д., Не прибегая к низкоуровневым вызовам, которые в итоге делают программу непереносимой.

Java-программа написана и скомпилирована с использованием Java-компилятора. Результирующий объектный код (называется байт код) может быть перенесен на другую операционную систему хоста, работающую на другом оборудовании, и должен работать без проблем.

JIT-компилятор

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

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

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

Вы разработали нативное приложение и вам пришлось перейти на Java из-за переносимости? Или наоборот из-за проблем с производительностью? Дайте нам знать в комментариях ниже.

Изображение предоставлено: Profit_Image через Shutterstock.com

Ссылка на основную публикацию
Adblock
detector