Рекламное объявление

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

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

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

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

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

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

instagram viewer

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

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

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

#ifdef _WIN32. # включают # ifdef small / * windows.h определяет small для char * / # undef маленький. # endif. # ifdef BZ_EXPORT. # define BZ_API (func) WINAPI func. # определить BZ_EXTERN extern. # else / * динамически импортировать Windows DLL * / # define BZ_API (func) (WINAPI * func) # определить BZ_EXTERN. # endif. #else. # define BZ_API (func) func. # определить 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, Networking, 3D-графика, несколько процессоров и т. Д. без необходимости прибегать к низкоуровневым вызовам, что делает программу непереносимой.

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

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

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

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

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

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

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