реклама
Java виртуалната машина (JVM) е истинско капкомер, когато програмирате в Java. Противно на това, което показва името, виртуалната машина на Java може да се срещне и във връзка с други езици на програмиране.
Като цяло не е необходимо да знаете какво представлява виртуалната машина на Java или дори какво прави, за да можете да програмирате в Java. От друга страна, запознаването с вътрешната работа на една машина наистина помага да се повиши вашето разбиране и цялостна представа.
Тази статия обхваща идеята за виртуалната машина на Java, какво прави за вас и някои от най-важните плюсове и минуси. Въпреки че се опитах да го опростя и определено има по-напреднала литература по темата, се очаква рудиментарно разбиране на Java и програмиране.
Езици на високо ниво
Семантиката на език за програмиране е проектирана така, че да е близка до естествения ни език, като същевременно остава кратка и лесна за тълкуване за машина. Както вероятно знаете, езикът на програмиране е напълно различен от машинния код, набор от инструкции, които компютърът използва за конструиране и стартиране на програма. Това ние наричаме
езици на високо ниво; едно или няколко нива на абстракция от машинния код.Преди да може да се стартира, първо трябва да се интерпретира код от високо ниво. Много програмни интерфейси се компилират предварително (AOT компилация) за конкретна платформа. Това прави програмата по-ефективна по време на изпълнение, но далеч по-малко съвместима с различни платформи. За разлика от Java, работи с междинен език, наречен Java байт код и на Java виртуална машина.
JVM & Java Bytecode
Когато вашият Java проект се изгражда, той превежда изходния код (съдържа се в *.java изходни файлове) към байт код на Java (най-често се съдържа в * .class файлове). Това отвежда вашия код на високо ниво с една крачка по-близо до машинен код, но все още не е съвсем там. Този байт код е съвкупност от компактни инструкции; по-лесна за машина интерпретация, но по-малко четена.
Когато стартирате Java приложение на вашия компютър, мобилен телефон или друга платформа с активирана Java, по същество предавате този байт код на Java на виртуалната машина на Java. Преводачът във виртуалната машина на Java обикновено започва да компилира целия байт код по време на изпълнение, следвайки принципите на т.нар. точно навреме компилация. Това прави типичното, макар и често леко закъснение при отваряне на Java приложение, но като цяло подобрява производителността на програмата в сравнение с интерпретирана компилация.

Основното предимство на тази система е повишената съвместимост. Тъй като вашите приложения работят във виртуална машина вместо директно на вашия хардуер, разработчикът може да програмира и изграждат приложението им веднъж, което след това може да бъде изпълнено на всяко устройство с реализация на Java Virtual Машина. Този принцип породи слогана на Java:Пиши веднъж, тичай навсякъде.”
Pro: Съвместимост и повишена сигурност
Освен съвместимост с кода, виртуалната машина на Java предлага и други предимства. Една от най-важните от тях е относителната сигурност на Java програмите в резултат на виртуалната машина на Java. Сигурност, което означава, че програма, работеща на виртуална машина, има много по-малка вероятност да наруши операционната система на потребителя или да повреди файловете с данни, ако възникнат грешки.
Con: Различни реализации и отстраняване на грешки в JVM
Една от основните критики, изразени срещу съвместимостта на кода и виртуалната машина на Java, се дължи на множеството различни реализации на последната. Виждате ли, виртуалната машина на Java не е част от софтуера. Oracle, собствениците на Java, имат своята реализация на виртуалната машина на Java, но други хора могат да направят своето, ако то удовлетворява различни практически и договорни претенции.
Тези различни реализации означават, че вашият код може да работи безпроблемно на една виртуална машина на Java, но да се срине и да изгори на друга. Въпреки че на практика можете да напишете кода си веднъж и да го стартирате навсякъде, по-сложен код понякога все още трябва да се отстранява грешки в различни реализации на Java Virtual Machine, за да се осигури правилна работа.
Имате ли опит от работата с Java виртуалната машина? Ако е така, има ли нещо, което съм пропуснал тук, което трябва да се спомене?
Кредит за изображение: Michaelaw, Dcoetzee
Аз съм писател и студент по компютърни науки от Белгия. Винаги можете да ми направите услуга с добра идея за статия, препоръка за книга или идея за рецепта.