|
< Back | Wikipedia | Home | Dark Mode Java Virtual MachineJava Virtual Machine (ili JVM) e abstraktna izchislitelna mashina, koiato pozvoliava na kompiut'r da izp'lniava programa na ezika Java nezavisimo ot negoviia kharduer i operatsionna sistema. Po analogiia na realnite elektronnoizchislitelni mashini ima nabor ot instruktsii i manipulira oblasti ot pametta po vreme na izp'lnenie na programite. JVM se bazira na tri osnovni komponenta: spetsifikatsiia, implementatsiia i instantsiia. Spetsifikatsiiata e dokument, koito formalno opisva tova, koeto e neobkhodimo za implentatsiiata na JVM. Nalichieto na edinstvena spetsifikatsiia osiguriava operativnata s'vmestimost na vsichki implementatsii. Implementatsiia na JVM e kompiut'rna programa, koiato otgovaria na iziskvaniiata na JVM spetsifikatsiiata. Instantsiia na JVM e implementatsiia, raboteshcha v daden protses. Sreda za izp'lnenie na java (Java Runtime Environment) - tova e softueren paket, koito s'd'rzha tova, koeto se iziskva za startirane na Java programi. Tia vkliuchva v sebe si implementatsiia Java virtualna mashina(JVM) zaedno s implementatsiia na bibliotekite ot klasove na java(Java Class Library). Korporatsiiata Oracle, koiato e sobstvenik na t'rgovska marka na Java, razprostraniava sredata za izp'lnenie na Java(JRE) s tiakhnata java virtualna mashina(JVM) narechena HotSpot(Java HotSpot Performance Engine). Java Development Kit (JDK) e nadgrazhdane na JRE i s'd'rzha instrumenti za razrabotkata na Java prilozheniia, kato naprimer kompilatora na java kod - javac. JDK se predostavia bezplatno ili direktno ot Oracle Corporation, ili OpenJDK otvoren proekt, koito se nadzirava ot kompaniiata Oracle. Java virtualnata mashina (JVM) e abstrakten (virtualen) kompiut'r, opredelen ot spetsifikatsiiata. Tazi Spetsifikatsiia namaliava detailite na implementatsiiata, koito ne sa ot s'shchestveno znachenie za postigane na operativna s'vmestimost: v oblasttite na pametta otgovorni za dinamichnite danni, garbage-collection(Sistema za pochistvane na pametta) algoritmi, i vsiaka v'treshna optimizatsiia na instruktsiite na Java virtualnata mashina (prevezhdaneto v mashinen kod). Osnovnata prichina za tozi propusk e da ne se ogranichavat izlishno implementatorite na JVM. Vsiako java-bazirano prilozhenie mozhe da raboti samo v ramkite na niakakva konkretna realizatsiia na abstraktnata spetsifikatsiia na Java virtualnata mashina. Zapochvaiki s Java Standard Edition (j2se) 5.0, promenite v spetsifikatsiite na JVM sa razraboteni spriamo Java Community Process(obshchestven protses za razrabotka na Java spetsifikatsii) kato JSR 924. k'm 2006 godinaK'm 2006 [obnoviavane] promenite v spetsifikatsiiata podkrepiat promenite, predlagani za formata na .java faila (JSR 202) se izv'rshva, kato reliiz za poddr'zhka - JSR 924. Spetsifikatsiiata za JVM e publikuvanakato ,,sinia kniga", v predgovora se kazva: ,, Nie tv'rdim, che tazi spetsifikatsiia bi triabvalo mnogo dobre da dokumentira Java virtualnata mashina, za da napravi v'zmozhno s'vmestimi clean-room implementatsii. Oracle predostavia testove, koito shche opredeliat pravilnite operatsii na implementatsiite na JVM. "Edna ot virtualnite mashini na Oracle e s imeto HotSpot, drugata, nasledena ot BEA Systems e Jrockit. Imlementatsiite na Java s Clean-Room dizain vkliuchvat v Kaffe i IBM J9. Oracle pritezhava t'rgovskata marka Java i mozhe da razreshi izpolzvaneto i za sertifitsirane na implementatsii, nap'lno s'vmestim s Oracle spetsifikatsiia. Edna ot organizatsionnite edinitsi za JVM e klasa. Implementatsiiata na Class loader, triabva da b'de v s'stoianie da razpoznavat i zarezhda(load) vsichko, koeto otgovaria na klas formata v Java. Vsiaka implementatsiia mozhe da razpoznava drugi dvoichni failove, razlichni ot .class failovete, no zad'lzhitelno triabva da mozhe da razpoznava .class failove. Class Loader izp'lniava tri osnovni deistvie v stroga posledovatelnost:
V kraina smetka, ima dva vida Class Loader-i bootstrap class loader i definiran ot potrebitelia Class Loader. Vsiaka implementatsiia na Java virtualna mashina triabva da ima bootstrap class loader, koito da zaredi nadezhdnite klasove. Spetsifikatsiiata na Java virtualnata mashina ne spetsifitsira kak tochno Class Loader-a triabva da nameri klasove. JVM ima instruktsii za slednite grupi zadachi: Zarezhdane i zapazvane;Aritmetika; Preobrazuvane na tipove; S'zdavane i manipulirane na obekti; Menidzhm'nt na stack(stek) (push / pop); Branching; Izp'lneniia na metodi; Khv'rliane na izkliucheniia(exceptions); Monitor-based concurrency; Tselta e binary s'vmestimost. Vseki konkreten khost - operatsionna sistema se nuzhdae ot sobstvena implementatsiia na JVM i sreda za izp'lnenie. Tezi Java virtualni mashini interpretirat bait-kod semantichno (t.e ima ednakvo znachenie/rezultata e edin i s'shch), no realnata implementatsiia mozhe da b'de razlichna. Po-slozhno, otkolkoto prosto da se emulira bait-kod e implementatsiiata na Java Core API da e s'vmestima i efektivna. Tezi instruktsii se izp'lniavat v'rkhu mnozhestvo ot obshchi Shablon:Vanchor, kakto i na protsesoren kod za konkretna protsesorna arkhitektura. Ezik za JVM e vseki ezik, s funktsionalnost, koiato mozhe da se izrazi po otnoshenie na validen class fail, koito mozhe da b'de postaven na Java virtualnata mashina. Fail klas s'd'rzha JVM instruktsii (Java bait kod) i Tablitsa na znatsite, kakto i druga pomoshchna informatsiia. Format't na .class faila e kharduer i operatsionna sistema ot nezavisimi dvoichen Format, izpolzvan, za da predstavi s'staven klasove i interfeisi. Ima mnozhestvo JVM ezitsi, kakto starite ezitsi, preneseni na JVM, taka i nap'lno novi ezitsi. JRuby i Jython sa mozhe bi, nai-izvestnite preneseni na JVM, s'shchestvuvashchi ezitsi, s'otvetno Ruby i python. Ot novite ezitsi, koito biakha s'zdadeni ot nulata, za da se kompilirat v bait kod na java, Clojure, groovy i i Scala mozhe bi sa nai-populiarnite ot tiakh. Zabelezhitelna cherta na JVM ezitsite e, che te sa s'vmestimi edin s drug, taka che, naprimer, Scala biblioteka mozhe da se izpolzva s Java-programi i obratno. Za vsiaka kharduerna arkhitektura razlichen java interpretator e nuzhen. Kogato kompiut'r't ima instaliran java bait kod interpretator, toi mozhe da izp'lni vsichki java bait kod programi, i edna i s'shcha programa mozhe da raboti na vseki kompiut'r, koito ima tak'v prevodach. Kogato java bait-kod se izp'lniava s pomoshchta na interpretator, izp'lnenieto vinagi shche b'de po-bavno, otkolkoto na izp'lnenieto na s'shchata programa kompilirano v mashinen ezik. Tozi problem se reshava s JIT (just-in time compilers), kato se startira java-baitkod. JIT kompilator't mozhe da prevede bait kod na java v mashinen ezik po vreme na izp'lnenieto na programata. Prevedenata chast ot programata mozhe da se izp'lni mnogo po-b'rzo, otkolkoto mozhe da se interpretira. Tazi tekhnika se prilaga v tezi chasti ot programata, koito chesto se izp'lniavat. Po tozi nachin, JIT kompilator't mozhe znachitelno da uskori obshchoto vreme za izp'lnenie. Java bait-koda e proektiran da b'de nezavisim ot platformata i siguren. V niakoi realizatsii na jvm-mashini ne vkliuchvat interpretator, a se s'stoiat samo ot JIT kompilator. Oshche v nachaloto na protsesa na razrabotka, Java (i jvm) se promotira kato ueb-tekhnologiia za s'zdavane na Rich Internet Applications. Ot strana na klienta, ueb brauz'r't mozhe da b'de razshiren s NPAPI Java plug-in, koito izp'lniava taka narechenite java-apleti vgradeni v HTML stranitsa. Apleta pozvoliava da se risuva v pravo'g'lna oblast na stranitsata, izpolzvaiki ogranichen nabor ot API, koito pozvoliavat, naprimer, dost'p do potrebitelia mikrofon ili 3D uskorenie. Java-apletite sa bili po-dobri ot JavaScript, kakto v proizvoditelnostta i funktsionalnostta do okolo 2011 godina, kogato JavaScript engine v brauz'rite stavat znachitelno po-b'rzi i HTML 5 nabora ot ueb tekhnologii, zapochna razshiriavaneto na JavaScript s novi API-ta. Java-apleti, ne mogat da promeniat stranitsa izv'n pravo'g'lna oblast, koeto ne e viarno za JavaScript. P'rviiat prototip na virtualnata mashina e realiziran ot Sun Microsystems za prenosimo ustroistvo, analogichno na s'vremennite personalni elektronni pomoshchnitsi (PDA). Virtualnata mashina e realizirana kato interpretator na bait kod, no mozhe da se realizira da kompilira do instruktsii na realniia protsesor i dori da se izgradi kharduerno bazirana realizatsiia - silitsiev mikroprotsesor, sposoben da izp'lniava bait kod. Virtualnata mashina ne poznava samiia ezik za programirane Java, a samo izp'lniava instruktsiite na bait-koda, zapisani kato class failove. Vseki ezik za programirane, koito mozhe da se kompilira do bait-kod, mozhe da b'de izp'lniavan ot virtualnata mashina.
Source: bg.wikipedia.org |