Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Instalimi i një makinerie java. JVM (Makina virtuale Java)

Mund të kompilohet në bitekod Java, i cili më pas mund të ekzekutohet nga JVM.

JVM është një komponent kyç i platformës Java. Meqenëse makinat virtuale Java janë të disponueshme për shumë platforma harduerike dhe softuerike, Java mund të konsiderohet edhe si softuer i mesëm dhe si një platformë më vete, prandaj parimi "shkruaj një herë, ekzekuto kudo". Përdorimi i një bajtkodi për shumë platforma lejon që Java të përshkruhet si "përpiloje një herë, ekzekuto kudo".

Specifikimi JVM

Konfrontimi mes Sun dhe IBM

Në vitin 2001, me synimin për të zhvilluar një standard për aplikacionet e desktopit ndër-platformë, Eclipse.

IBM VisualAge. IBM arriti të balancojë interesat e komunitetit të lirë dhe interesat e biznesit (interesat e tij) në Licencën Publike Eclipse, të njohur nga FSF.

Projekti po zhvillohet me sukses, njihet nga industria dhe është ndarë kryesisht nga IBM në Fondacionin e pavarur Eclipse.


Fondacioni Wikimedia. 2010.

Shihni se çfarë është "Java Virtual Machine" në fjalorë të tjerë:

    Makina virtuale Java- Pjesa kryesore e performancës Sistemet Java(Java Runtime Environment; JRE). Makina Virtuale Java interpreton dhe ekzekuton kodin e bajtit Java të krijuar më parë nga kodi burim i një programi Java nga një përpilues Java. JVM mund të përdoret për... - zhvilluar nga JavaSoft. Aplikacionet në ueb të ndërtuara duke e përdorur atë mund të funksionojnë në mënyrë origjinale brenda sistemit operativ, ose shfletues uebi, ose brenda një mjedisi emulues të njohur si Makina Virtuale Java... Fjalori i E-Biznesit

    - (JPF) një mjet falas për testimin e programeve Java me shumë fije. Në thelbin e saj, ajo është një Makinë Virtuale Java mbi bazën e së cilës zbatohen metodat e kontrollit të modelit. Kjo do të thotë se... ... Wikipedia

    Makina virtuale Java- Interpretuesi i kodit bajt për programet Java. Një makinë virtuale e krijuar për të ekzekutuar aplikacionet Java. JVM është ndërtuar në shumicën e shfletuesve të internetit. Kjo ju lejon të ekzekutoni aplikacione Java në anën e klientit, thirrjet e të cilave ofrohen në ... ... Udhëzues teknik i përkthyesit

    Një emër tjetër për këtë koncept është "Java"; shih edhe kuptime të tjera. Të mos ngatërrohet me JavaScript. Klasa e gjuhës Java ... Wikipedia

    Është e nevojshme të kontrollohet cilësia e përkthimit dhe të bëhet artikulli në përputhje me rregullat stilistike të Wikipedia. Ju mund të ndihmoni në përmirësimin e këtij artikulli duke korrigjuar gabimet. Origjinali n... Wikipedia

JVM është një komponent kyç i platformës Java. Makina Virtuale Java interpreton dhe ekzekuton bitekodin Java të krijuar paraprakisht nga teksti burimor i një programi Java nga përpiluesi Java (javac).

Meqenëse makinat virtuale Java janë të disponueshme për shumë platforma harduerësh dhe softuerësh, Java mund të konsiderohet edhe si softuer i mesëm dhe si një platformë më vete, prandaj parimi "shkruaj një herë, ekzekuto kudo". Përdorimi i një bajtkodi të vetëm nëpër platforma të shumta lejon Java të përshkruhet si "përpiloje një herë, ekzekuto kudo".

Programet që synohen të ekzekutohen në JVM duhet të përpilohen në një format binar portativ të standardizuar, i cili zakonisht përfaqësohet si skedarë .class. Një program mund të përbëhet nga shumë klasa të vendosura në skedarë të ndryshëm. Për ta bërë më të lehtë pritjen e programeve të mëdha, disa skedarë .class mund të paketohen së bashku në një skedar të ashtuquajtur .jar (shkurt për Java Archive).

Makina virtuale JVM ekzekuton skedarë .klasë ose .kavanoz, duke emuluar udhëzimet e shkruara për JVM duke interpretuar ose duke përdorur një përpilues just-in-time (JIT) siç është HotSpot nga microsystems Sun. Këto ditë, përpilimi JIT përdoret në shumicën e JVM-ve për të arritur shpejtësi më të madhe. Ekzistojnë gjithashtu përpilues të parakohshëm që lejojnë zhvilluesit e aplikacioneve të parapërpilojnë skedarët e klasës në kodin vendas specifik të platformës.

JVM, i cili është një shembull i JRE (Java Runtime Environment), hyn në lojë kur ekzekutohet programet Java. Pas përfundimit të ekzekutimit, ky shembull fshihet nga mbledhësi i mbeturinave. JIT është një pjesë e Makinës Virtuale Java që përdoret për të shpejtuar kohën e ekzekutimit të aplikacioneve. JIT në të njëjtën kohë përpilon pjesë të bytekodit që kanë funksionalitet të ngjashëm dhe për këtë arsye zvogëlon sasinë e kohës që kërkohet për përpilim.

JVM është një makinë stack. Kjo do të thotë se nuk ka regjistra për qëllime të përgjithshme dhe operacionet kryhen në të dhënat e vendosura në stek. Ky qëllim shërbehet nga një pirg operandesh i alokuar brenda çdo kuadri. Kur ekzekutohen komandat e bajtkodit Java që modifikojnë të dhënat, operandët e atyre komandave dalin nga grupi i operandeve dhe rezultatet e komandave shtyhen në të njëjtin pirg.

Koha e ekzekutimit e një metode përmban informacionin e nevojshëm për lidhjen dinamike, kthimin e metodës dhe trajtimin e përjashtimeve. Kodi i klasës (i vendosur në fushëveprimin e klasës) akseson metodat dhe variablat e jashtme duke përdorur lidhje simbolike. Lidhje dinamike konverton lidhjet simbolike në lidhje aktuale. Ambienti i kohës së funksionimit përmban referenca për tabelën e simboleve të metodës, përmes së cilës kryhen thirrje për metoda dhe variabla të jashtme.

Koha e ekzekutimit përmban gjithashtu informacionin e nevojshëm për t'u kthyer nga një metodë: një tregues në kornizën e metodës thirrëse, vlerën e regjistrit pc që duhet kthyer, përmbajtjen e regjistrave të metodës thirrëse dhe një tregues në zonën për të shkruar vlerën e kthimit.

Informacioni i trajtimit të përjashtimeve përmban referenca për seksionet e trajtimit të përjashtimeve të një metode klase.

Koha e ekzekutimit gjithashtu i referohet të dhënave të përfshira në zonën e klasës, duke përfshirë konstantet dhe variablat e klasës.

Udhëzimet JVM përbëhen nga një kod optik një-bit dhe mund të përmbajnë gjithashtu operandë. Numri dhe madhësia e operandëve përcaktohen nga kodi optik; disa udhëzime nuk kanë operandë

Çfarë është JVM?

JVM është një motor që ofron mjedis të ekzekutimit për të drejtuar kodin Java ose aplikacionet. Ai konverton bajtkodin Java në gjuhën e makinave. JVM është pjesë e JRE (Java Run Environment). Ai qëndron për Java Virtual Machine

  • Në gjuhë të tjera programimi, përpiluesi prodhon kodin e makinës për një sistem të caktuar. Sidoqoftë, përpiluesi Java prodhon kodin për një makinë virtuale të njohur si Java Virtual Machine.
  • Së pari, kodi Java përpilohet në bytecode. Ky bajtkod interpretohet në makina të ndryshme
  • Mes pritës sistemi dhe Burimi Java, Bytecode është një gjuhë ndërmjetëse.
  • JVM është përgjegjëse për ndarjen e hapësirës së memories.

Në këtë tutorial, do të mësoni-

Arkitektura JVM

Le të kuptojmë Arkitekturën e JVM. Ai përmban ngarkuesin e klasës, zonën e memories, motorin e ekzekutimit etj.

1) ClassLoader

Ngarkuesi i klasës është një nënsistem që përdoret për ngarkimin e skedarëve të klasës. Ai kryen tre funksione kryesore dmth. Ngarkimi, Lidhja dhe Inicializimi.

2) Zona e metodës

Zona e Metodës JVM ruan strukturat e klasës si meta të dhënat, grupin e vazhdueshëm të kohës së funksionimit dhe kodin për metodat.

Të gjithë Objektet, variablat e tyre të instancës dhe vargjet ruhen në grumbull. Kjo memorie është e zakonshme dhe e ndarë në tema të shumta.

4) Stacks të gjuhës JVM

Stacks të gjuhës Java ruajnë variabla lokale dhe janë rezultate të pjesshme. Secili thread ka pirgun e vet JVM, i krijuar njëkohësisht kur krijohet thread. Një kornizë e re krijohet sa herë që thirret një metodë dhe fshihet kur procesi i thirrjes së metodës përfundon.

5) Regjistrat e PC

Regjistri i PC-së ruan adresën e udhëzimit të makinës virtuale Java që është duke u ekzekutuar. Në Java, çdo thread ka regjistrin e vet të veçantë PC.

6) Oxhaqet e metodës vendase

Raftet e metodës vendase mbajnë udhëzimin e kodit vendas varet nga biblioteka vendase. Është shkruar në një gjuhë tjetër në vend të Java.

7) Motori i ekzekutimit

Është një lloj softueri që përdoret për të testuar harduerin, softuerin ose sistemet e plota. Motori i ekzekutimit të provës nuk mbart kurrë asnjë informacion në lidhje me produktin e testuar.

8) Ndërfaqja Native Method

Ndërfaqja Native Method është një kornizë programimi. Ai lejon kodin Java që funksionon në një JVM të thërrasë nga bibliotekat dhe aplikacionet vendase.

9) Bibliotekat e metodës vendase

Bibliotekat vendase janë një koleksion i Bibliotekave vendase (C, C++) cilat jane të nevojshme nga Ekzekutimi Engine.

Procesi i përpilimit dhe ekzekutimit të kodit të softuerit

Për të shkruar dhe ekzekutuar një program softuer, ju nevojiten sa më poshtë

1) Redaktori– Për të shtypur programin tuaj, mund të përdoret një bllok shënimesh për këtë

2) Përpiluesi– Për të kthyer programin tuaj të gjuhës së lartë në kodin e makinës amtare

3) Lidhës– Për të kombinuar të ndryshme dosje programesh referencë në programin tuaj kryesor së bashku.

4) Ngarkues– Për të ngarkuar skedarët nga pajisja juaj e ruajtjes dytësore si p.sh Hard disk, Flash Drive, CD në RAM për ekzekutim. Ngarkimi bëhet automatikisht kur ekzekutoni kodin tuaj.

5) Ekzekutimi– Ekzekutimi aktual i kodit që trajtohet nga OS dhe procesori juaj.

Me këtë sfond, referojuni videos së mëposhtme dhe mësoni funksionimin dhe arkitekturën e Makinës Virtuale Java.

Procesi i përpilimit dhe ekzekutimit të kodit C

Për të kuptuar procesin e përpilimit të Java në Java. Le të marrim së pari një shikim i shpejte për përpilimin dhe lidhjen e procesit në C.

Supozoni se në krye keni thirrur dy funksione f1 dhe f2. Funksioni kryesor ruhet në skedarin a1.c.

Funksioni f1 ruhet në një skedar a2.c

Funksioni f2 ruhet në një skedar a3.c

Të gjithë këta skedarë, d.m.th., a1.c, a2.c dhe a3.c, i jepen kompajlerit. Prodhimi i të cilit janë skedarët e objektit përkatës që janë kodi i makinës.

Hapi tjetër është integrimi i të gjithë këtyre skedarëve të objektit në një skedar të vetëm .exe me ndihma e lidhësit. Lidhësi do të bashkojë të gjithë këta skedarë së bashku dhe do të prodhojë skedarin .exe.

Gjatë ekzekutimit të programit, një program ngarkues do të ngarkojë a.exe në RAM për ekzekutim.

Përpilimi dhe ekzekutimi i kodit Java në Java VM

Le të shohim në proces për JAVA. Në bazën tuaj, ju keni dy metoda f1 dhe f2.

  • Metoda kryesore ruhet në skedarin a1.java
  • f1 ruhet në një skedar si a2.java
  • f2 ruhet në një skedar si a3.java

Përpiluesi do të përpilojë tre skedarët dhe do të prodhojë 3 skedarë përkatës .class i cili përbëhet nga kodi BYTE. Ndryshe nga C, nuk bëhet asnjë lidhje.

Java VM ose Java Virtual Machine qëndron në RAM. Gjatë ekzekutimit, duke përdorur ngarkuesin e klasës, skedarët e klasës sillen në RAM. Kodi BYTE verifikohet për çdo shkelje të sigurisë.

Më pas, motori i ekzekutimit do të konvertojë Bytecode në kodin e makinës vendase. Kjo është pikërisht në kohën e përpilimit. Është një nga arsyet kryesore pse Java është relativisht e ngadaltë.

SHËNIM: JIT ose përpiluesi Just-in-time është pjesë e Makinës Virtuale Java (JVM). Ai interpreton një pjesë të Kodit Byte që ka funksione të ngjashme në të njëjtën kohë.

Pse Java është gjuhë e interpretuar dhe e përpiluar?

Gjuhët e programimit klasifikohen si
  • Gjuha e Nivelit të Lartë P.sh. C++, Java
  • Gjuhët e nivelit të mesëm P.sh. C
  • Gjuha e nivelit të ulët Ex Assembly
  • më në fund niveli më i ulët si Gjuha e Makinerisë.

A përpiluesështë një program i cili konverton një program nga një nivel gjuhe në tjetrin. Shembull i konvertimit të programit C++ në kodin e makinës.

Përpiluesi java konverton kodin java të nivelit të lartë në bytecode (i cili është gjithashtu një lloj kodi i makinës).

Një përkthyesështë një program i cili konverton një program në një nivel në një gjuhë tjetër programimi në të njëjtin nivel. Shembull i konvertimit të programit Java në C++

Në Java, gjeneratori i kodit Just In Time konverton bajtkodin në kodin vendas të makinës që janë në të njëjtat nivele programimi.

Prandaj, Java është si gjuhë e përpiluar ashtu edhe e interpretuar.

Pse Java është e ngadaltë?

Dy arsyet kryesore prapa ngadalësisë së Java janë

  1. Lidhja dinamike: Ndryshe nga C, lidhja bëhet në kohën e ekzekutimit, sa herë që programi ekzekutohet në Java.
  2. Përkthyesi i kohës së ekzekutimit: Shndërrimi i kodit të bajtit në kodin origjinal të makinës bëhet në kohën e ekzekutimit në Java, gjë që ngadalëson më tej shpejtësinë

Sidoqoftë, versioni i fundit i Java-s i ka trajtuar pengesat e performancës në një masë të madhe.

Përmbledhje:

  • JVM ose Java Virtual Machine është motori që drejton kodin Java. Ai konverton bajtkodin Java në gjuhën e makinave.
  • Në JVM, kodi Java përpilohet në bytecode. Ky bajtkod interpretohet në makina të ndryshme
  • JIT ose përpiluesi Just-in-time është pjesë e Makinës Virtuale Java (JVM). Përdoret për të përshpejtuar kohën e ekzekutimit
  • Në krahasim me makinat e tjera përpilues, Java mund të jetë e ngadaltë në ekzekutim.
JVM (Java Virtual Machine) - baza e gjuhës Programimi Java. Mjedisi Java përbëhet nga pesë elementë:
■ Gjuha Java
■Përkufizimi i bytekodit
■ Bibliotekat e klasave Java/Sun
■ Makina virtuale Java
■ Struktura e skedarit .class

Nga të gjithë këta pesë elementë, elementët që çuan në suksesin e Java
■ Përkufizimi i bytekodit,
■ struktura e skedarit.klasa,
■ dhe Java Virtual Machine.

Kështu, "shkruani një herë dhe ekzekutoni kudo" në fakt është bërë e mundur nga lëvizshmëria e skedarit .class, i cili lehtëson ekzekutimin në çdo kompjuter ose chipset duke përdorur Makinën Virtuale Java.

1.3.1 Çfarë është Makina Virtuale Java?

Një makinë virtuale është softuer i bazuar në konceptet dhe idenë e një kompjuteri imagjinar që ka një grup logjik instruksionesh dhe komandash që përcaktojnë operacionet e atij kompjuteri. Është, mund të thuhet, një sistem i vogël operativ. Ajo formon nivelin e kërkuar abstraksione ku arrihet pavarësia nga platforma dhe pajisjet e përdorura.

Përpiluesi konverton teksti origjinal në kod që bazohet në grupin imagjinar të instruksioneve të kompjuterëve dhe nuk varet nga specifika e procesorit. Një përkthyes është një aplikacion që kupton këto rryma komandash dhe i përkthen këto komanda për harduerin që përdoret, të cilit i përket përkthyesi. JVM krijon një sistem kohëzgjatjeje nga brenda që ndihmon kodin të ekzekutohet kur
■ ngarkimi i skedarëve .class,
■ menaxhimi i memories
■ kryerja e trajtimit të përjashtimeve.

Për shkak të mospërputhjes së platformave harduerike, një makinë virtuale përdor konceptin e një pirg, i cili përmban informacionin e mëposhtëm:
■ Përshkruesit e gjendjes së metodës
■ Operacionet në bajtkode
■Parametrat e metodës
■ Variablat lokale

Kur kodi ekzekutohet duke përdorur JVM, ekziston një regjistër i veçantë që përdoret si numërues, që tregon komandat që ekzekutohen aktualisht. Nëse është e nevojshme, komandat modifikojnë programin, duke ndryshuar rrjedhën e ekzekutimit, përndryshe rrjedha është sekuenciale dhe lëviz nga një komandë në tjetrën.

Një koncept tjetër që po bëhet popullor është përdorimi i një përpiluesi Just In Time (JIT). Shfletuesit si Netscape Navigator 4.0 dhe Internet Explorer 4.0 përfshijnë përpilues JIT që rrisin shpejtësinë e ekzekutimit të kodit Java. Qëllimi kryesor i JIT është të konvertojë grupin e instruksioneve të bytekodit në instruksione të kodit të makinës të synuara për një mikroprocesor specifik. Këto komanda ruhen dhe përdoren sa herë që bëhet një kërkesë për atë metodë specifike.

1.3.2 Java e ekzekutimit

JRE (Java Runtime Environment) JVM ndërvepron me harduerin në njërën anë dhe programin nga ana tjetër. Kodi JRE ekzekuton i përpiluar për JVM:
Duke ngarkuar skedarët .class
Përfunduar duke përdorur "Klasa Ngarkues"
Ngarkuesi i klasës bën një kontroll sigurie nëse skedarët përdoren në rrjet.
Verifikimi i bytekodit
Kryhet nga një "verifikues i bytekodit"
Një verifikues i bytekodit kontrollon formatin e kodit, konvertimet e llojit të objektit dhe kontrollon për shkelje të aksesit.
Kodi Ekzekutues
Ekzekutuar "nga përkthyesi në kohën e ekzekutimit"
Përkthyesi ekzekuton bajtkodet dhe bën kërkesa për harduerin që përdoret.


Figura 1.3: Java Runtime Environment

1.3.3 Trajtimi i përjashtimeve dhe menaxhimi i kujtesës

Në C, C++ ose Pascal, programuesit përdorën metoda primitive për ndarjen dhe lirimin e blloqeve të memories - memorie dinamike. Kujtesa dinamike është një pjesë e madhe e memories, e cila përcaktohet në vëllimin e të gjithë memories.

Përdoret memoria dinamike:
Lista e bllokimeve falas
Lista e Blloqeve të Shpërndara

Lista e lirë kontrollon një bllok memorie sa herë që bëhet një kërkesë. Mekanizmi i alokimit i përdorur është metoda e "përshtatjes së parë", ku blloku i parë më i vogël i memories ndahet në varësi të kërkesës. Kjo procedurë shpërndan dhe çliron sasi të vogla memorie me madhësi të ndryshme nga grumbulli, duke minimizuar fragmentimin e grumbullit.

Ekziston një fazë ku bëhet një kërkesë memorie për të marrë një bllok memorie më të madhe se sa është në dispozicion. Në raste të tilla, menaxheri i grumbullit duhet të krijojë më shumë memorie. Kjo teknikë quhet ngjeshje. Ky është procesi me të cilin të gjitha blloqet e memories së disponueshme kombinohen së bashku duke lëvizur memorie të lirë një fund i memories dinamike, duke krijuar kështu një bllok të madh memorie.

Makina virtuale Java përdor dy grumbullime të veçanta për shpërndarjen e memories statike dhe dinamike.

Memoria Dinamike - Nuk trajton përjashtimet dinamike të memories, e cila ruan të gjitha vetitë e klasës, grupet e vazhdueshme dhe tabelat e metodave.

Kujtesa e dytë dinamike ndahet përsëri në dy seksione, të cilat mund të zgjerohen drejtime të kundërta kur eshte e nevojshme. Një ndarje përdoret për të ruajtur instancat e objekteve, dhe ndarja tjetër përdoret për të ruajtur dorezat në ato instanca. Një përshkrues është një strukturë që përbëhet nga dy tregues. Drejtoni një tabelë të metodave të objektit dhe artikujve të tjerë në një shembull të atij objekti. Ky rregullim eliminon në thelb nevojën për të ruajtur shtigjet që tregojnë një objekt kur modifikohen treguesit pas ngjeshjes. Gjithçka që duhet të bëjmë është të përditësojmë vlerën e treguesit të dorezës.

Algoritmi i trajtimit të përjashtimeve zbatohet për objektet e vendosura në memorien dinamike. Kur merret një kërkesë për një bllok memorie, menaxheri i grumbullit së pari kontrollon listën e lirë dhe nëse menaxheri i grumbullit nuk mund të gjejë blloqe të memories së lirë, trajtimi i përjashtimeve thirret sapo sistemi të jetë i papunë për një periudhë të mjaftueshme kohore. Në rastet kur aplikacionet janë shumë ndërvepruese dhe koha e ndërprerjes së sistemit mbahet në minimum, trajtimi i përjashtimeve duhet të thirret në mënyrë eksplicite nga aplikacioni.

Mbledhësi i përjashtimeve thërret metodën e përfundimit përpara se një objekt mostër të mblidhet duke përdorur trajtimin e përjashtimeve. Metoda e përfundimit përdoret për të pastruar burimet e jashtme si skedarët dhe transmetimet që janë të hapura dhe të pakujdesshme përpunimi standard përjashtime. Edhe nëse e quajmë në mënyrë eksplicite trajtimin e përjashtimeve në metodën (System.gc()), ai nuk do të funksionojë shpejt. Është menduar vetëm për të punuar. Kjo gjithashtu do të thotë se trajtimi i përjashtimeve nuk mund të thirret. Kjo është për shkak se temat e trajtimit të përjashtimeve funksionojnë me përparësi shumë të ulët dhe mund të ndërpriten shpesh. Kjo mund të ndodhë kur objekti ynë nuk është vendosur kurrë më parë në memorie.

Artikujt më të mirë mbi këtë temë