Java виртуална машина (JVM)
From Wikipedia, the free encyclopedia
Java виртуалната машина (Java Virtual Machine) – това е абстрактна изчислителна машина, която позволява на компютър да стартирате Java програма. Има три концепции за JVM: Спецификация, имплементация и инстанция. Спецификацията е документ, който формално описва, това което е необходимо за имплентацията на JVM. Имайки само една спецификация, осигурява че всички имплементации на JVM са оперативно съвместими. Имплементация на Java виртуалната машина прилагането е всъщност компютърна програма, която отговаря на изискванията на JVM спецификация. Инстанция на JVM е имплементация работеща в даден процес , който изпълнява компютърна програма компилирана до java байткод.
Предлага се тази статия да се обедини със страницата Java Virtual Machine. |
Среда за изпълнение на java (Java Runtime Environment) – това е софтуерен пакет, който съдържа това, което се изисква за стартиране на Java програми. Тя включва в себе си имплементация Java виртуална машина(JVM) заедно с имплементация на библиотеките от класове на java(Java Class Library). Корпорацията Oracle, която е собственик на търговска марка на Java, разпространява средата за изпълнение на Java(JRE) с тяхната java виртуална машина(JVM) наречена HotSpot(Java HotSpot Performance Engine).
Java Development Kit (JDK) е надграждане на JRE и съдържа инструменти за разработката на Java приложения, като например компилатора на java код - javac. JDK се предоставя безплатно или директно от Oracle Corporation, или OpenJDK отворен проект, който се надзирава от компанията Oracle.
Java виртуалната машина (JVM) е абстрактен (виртуален) компютър, определен от спецификацията. Тази Спецификация намалява детайлите на имплементацията, които не са от съществено значение за постигане на оперативна съвместимост: в областтите на паметта отговорни за динамичните данни, garbage-collection(Система за почистване на паметта) алгоритми, и всяка вътрешна оптимизация на инструкциите на Java виртуалната машина (превеждането в машинен код). Основната причина за този пропуск е да не се ограничават излишно имплементаторите на JVM. Всяко java-базирано приложение може да работи само в рамките на някаква конкретна реализация на абстрактната спецификация на Java виртуалната машина.[1]
Започвайки с Java Standard Edition (j2se) 5.0, промените в спецификациите на JVM са разработени спрямо Java Community Process(обществен процес за разработка на Java спецификации) като JSR 924.[2] към 2006 годинаКъм 2006[обновяване] промените в спецификацията подкрепят промените, предлагани за формата на .java файла (JSR 202)[3] се извършва, като релийз за поддръжка – JSR 924. Спецификацията за JVM е публикуванакато „синя книга“,[4] в предговора се казва:
„ | Ние твърдим, че тази спецификация би трябвало много добре да документира Java виртуалната машина, за да направи възможно съвместими clean-room имплементации. Oracle предоставя тестове, които ще определят правилните операции на имплементациите на JVM. | “ |
Една от виртуалните машини на Oracle е с името HotSpot, другата, наследена от BEA Systems е Jrockit. Имлементациите на Java с Clean-Room дизайн включват в Kaffe и IBM J9. Oracle притежава търговската марка Java и може да разреши използването ѝ за сертифициране на имплементации, напълно съвместим с Oracle спецификация.
Една от организационните единици за JVM е класа. Имплементацията на Class loader, трябва да бъде в състояние да разпознават и зарежда(load) всичко, което отговаря на клас формата в Java. Всяка имплементация може да разпознава други двоични файлове, различни от .class файловете, но задължително трябва да може да разпознава .class файлове.
Class Loader изпълнява три основни действие в строга последователност:
- Loading(Зареждане): открива и добавя(import-ва) двоичните данни за типа
- Свързване(Linking): извършва се проверка, подготовка и резолюция (ако е необходимо)
- Проверка(verification): проверява се коректността на добавения(import-натия) тип
- Приготвяне(Preparation): заделя (алокира) памет за променливи на класа и инициализира паметта до стойностите по подразбиране(default values)
- Резолюция(Resolution): трансформира символните референции от даден тип в директни референции.
- Инициализация(Initialization): извиква Java код, който инициализира променливите на класа с техните начални стойности.
В крайна сметка, има два вида Class Loader-и bootstrap class loader и дефиниран от потребителя Class Loader.
Всяка имплементация на Java виртуална машина трябва да има bootstrap class loader, който да зареди надеждните класове. Спецификацията на Java виртуалната машина не специфицира как точно Class Loader-а трябва да намери класове.
JVM има инструкции за следните групи задачи:
Аритметика; Преобразуване на типове; Създаване и манипулиране на обекти; Мениджмънт на stack(стек) (push / pop); Branching; Изпълнения на методи; Хвърляне на изключения(exceptions); Monitor-based concurrency;
Целта е binary съвместимост. Всеки конкретен хост - операционна система се нуждае от собствена имплементация на JVM и среда за изпълнение. Тези Java виртуални машини интерпретират байт-код семантично (т.е има еднакво значение/резултата е един и същ), но реалната имплементация може да бъде различна. По-сложно, отколкото просто да се емулира байт-код е имплементацията на Java Core API да е съвместима и ефективна.
Тези инструкции се изпълняват върху множество от общи Шаблон:Vanchor, както и на процесорен код за конкретна процесорна архитектура.