Каква е разликата между компилатор JVM и JIT (точно навреме компилатор) в Java?


Отговор 1:

JVM („виртуална машина на Java“) има две значения:

  1. Това е абстрактен набор от инструкции, предназначен за стартиране на Java програми. Този набор от инструкции дефинира сравнително проста машина за подреждане на стекове, към която се компилират изходните програми на Java; тези инструкции се съхраняват във файлове с ".class". Това е програма, която работи на истински компютър, отколкото може да изпълни абстрактните JVM инструкции. Такъв JVM включва „интерпретатор“ за отделните инструкции на JVM, но също така включва всички поддържащи машини, необходими за поддържане на изпълнението на Java код, включително аритметични, функционални обаждания, разпределение на съхранение, събиране на боклук, планиране на нишки, файлови зареждащи файлове, файл I / O и друг достъп до локалната операционна система, ако е необходимо за стартиране на сложни Java приложения.

По-старите JVM буквално интерпретираха инструкциите JVM едно по едно по време на изпълнение. Това е лесно за изпълнение, поради което това беше направено. Но като всеки преводач, такава интерпретация на време за изпълнение произвежда време за изпълнение на програмата, които обикновено са с порядък по-бавни от нативния компилиран машинен код.

„JIT компилатор“ („JITter“) е характеристика на повечето съвременни JVM, които компилират части от JVM инструкции към родния машинен код като нови парчета или преди това се срещат парчета от JVM код по време на изпълнение. Човек би могъл да използва офлайн компилатор на Java-to-native-код (някои действително съществуват), за да осигури традиционните цели за пакетно компилиране, но това не е пътят на света на Java.

JITters имат едно предимство пред компилаторите на партиди: те могат да компилират код, който съответства на това, което се случва по време на изпълнение, и по този начин могат да помогнат за оптимизиране на динамичните свойства на Java кода, като например динамичното изпращане, което се случва при претоварени обаждания на метода на Java. Те имат недостатък: те не виждат програмата в голям мащаб и като цяло не могат да правят това, което добрите компилатори на партиди правят добре: глобални оптимизации. На практика компромисът означава Java програми, които са JIT-компилирани и работят доста добре, но не толкова бързо, колкото C или C ++ програми, които се компилират по традиционни методи.


Отговор 2:

Точно навреме компилаторът или JIT е неразделен компонент на Java Virtual Machine, заедно с Garbage collector, което както подсказва името прави компилация Just in time. Той е в състояние да компилира Java код директно на машинен език, което може значително да подобри производителността на Java приложението.

Между другото, не е гарантирано кой код ще бъде съставен и кога. JIT обикновено компилира горещ код в Hotspot JVM, след като изпълнението му пресече определена граница, например метод ще бъде преобразуван в машинен език, ако се извиква повече от 10K пъти и т.н.

Ето още няколко разлики между JVM и JIT в платформата за програмиране на Java:

1) Основната разлика между JVM и JIT има ли цел, основната цел на JVM е да осигури независимост на платформата, докато целта на JIT е да подобри работата на JVM, като компилира повече код на машинен език. Само имайте предвид, че тази компилация също отнема време, така че превеждането на целия код в родния код не си струва да се прави. Ето защо JIT най-често компилира често използвания код в родния код.

2) Друга разлика между JIT и JVM е, че JIT е част от JVM. Един пример за JIT е Hotspot JIT, който се предлага с JVM Hotspot. Нарича се гореща поща, тъй като нейният компилатор Just in time компилира само горещ код на родния език, който изпълнява 90% от времето.

Има настройка на прага, ако някой код изпълни повече от този праг, то той отговаря на условията точно за компилиране във времето. Между другото, Hotspot не е единственият JVM, който съдържа компилатори Just in time, има и други JVM, например оригиналният JRockit на Oracle.

3) Най-сетне JVM е по-стара концепция от JIT. JIT всъщност е изобретено, за да подобри производителността на JVM след години на първоначално пускане на Java, докато виртуалната машина на Java беше част от първоначалното издание на Java.

Това е разликата между JVM и JIT в Java. Както казах, JIT е част от JVM и се използва за подобряване на JVM производителността чрез динамично компилиране или превеждане на Java байтови кодове в кода на машинен език по време на изпълнение.


Отговор 3:

Основната разлика е:

  • JVM е виртуална машина на Java, докато JIT е Just In Time компилация. JIT е подмножеството на JVM, което се използва за повишаване на производителността на JVM.JVM се използва за изпълнение на байтов код на Java програми, което прави Java платформата независима, докато JIT компилира в момента изпълнение на байт код на машинен език.За по-добра производителност на JVM, JIT съхранява и този компилиран код.

Благодаря и всичко хубаво

шуят хан

данни за контакт: [email protected]