[{"text_idx": "#000001", "text": "Java virtuala mas\u0302ino ( JVM) estas abstrakta komputikmas\u0302ino kiu ebligas komputilon prizorgi Java programon.\nEkzistas tri nocioj de la JVM: specifo, efektivigo, kaj kazo.\nLa specifo estas dokumento kiu formale priskribas kio estas postulata de JVM-efektivigo.\nHavi ununuran specifon certigas ke c\u0302iuj efektivigoj estu interoperacieblaj.\nJVM-efektivigo estas komputila programo kiu renkontas la postulojn de la JVM-specifo.\nKazo de JVM estas efektivigo kuranta en procezo kiu ruligas komputilan programon kompilis en Java Bajtkodon."}, {"text_idx": "#000005", "text": "1 Sekura plenumo de malproksima kodo\nBajtkoda interpretilo kaj ekzakte g\u0302ustatempa kompililo"}, {"text_idx": "#000006", "text": "1 Sekura plenumo de malproksima kodo"}, {"text_idx": "#000007", "text": "La Java virtuala mas\u0302ino estas abstrakta (virtuala) komputilo difinita per specifo.\nTiu specifo preterlasas efektivigdetalojn kiuj ne estas esencaj certigi kunfunkcieblecon: la memorenpag\u0302igo de rultempaj datenareoj, la rubkolekto-algoritmo uzita, kaj ajna interna Optimumigo de la Java virtuala mas\u0302ininstrukciaj\u0302o (sia traduko en mas\u0302inkodon).\nLa c\u0302efkialo de tiu preterlaso devas ne unnecessar limigi efektivigantojn.\nC\u0302iu Java aplikaj\u0302o povas esti prizorgita nur ene de iu konkreta efektivigo de la abstrakta specifo de la Java virtuala mas\u0302ino."}, {"text_idx": "#000008", "text": "Komencante kun Java Platform, Standard Edition (Java Platform, Normeldono) (J2SE) 5.0, s\u0302ang\u0302oj al la JVM-specifo estis evoluigitaj sub la Java Komunuma Procezo kiel JSR 924.\nAktuale en 2006 [g\u0302isdatigo] , s\u0302ang\u0302oj al specifo apogi s\u0302ang\u0302ojn proponis al la klasa dosierformato (JSR 202) [3] estas faritaj kiel ripareldono de JSR 924.\nLa specifo por la JVM estis publikigita kiel la blua libro, [4] La antau\u0306parols\u0302tatoj:"}, {"text_idx": "#000009", "text": "Ni celas ke tiu specifo devus sufic\u0302e dokumenti la Javan Virtualan Mas\u0302inon por fari eblajn kongruajn pura-c\u0302ambrefektivigojn.\nOrakolo disponigas testojn kiuj konfirmas la bonordan operacion de efektivigoj de la Java Virtuala Mas\u0302ino."}, {"text_idx": "#000010", "text": "Unu el la JVMoj de Oracle estas nomita Retpunkto, la alia, heredis de BEA Systems estas JRockit.\nPura-c\u0302ambraj Java efektivigoj inkludas Kaffe kaj IBM J9.\nOrakolo posedas la Java varmarkon kaj povas permesi al g\u0302ia uzo atesti efektivigseriojn kiel tute kongruaj kun la specifo de Oracle."}, {"text_idx": "#000011", "text": "Unu de la organizaj unuoj de JVM-bajtkodo estas klaso.\nKlass\u0302argilo kiun efektivigo devas povi rekoni kaj s\u0302arg\u0302i io ajn kiu harmonias kun la Java klaso dosierformaton.\nC\u0302iu efektivigo estas libera rekoni aliajn binarajn formojn krom klas dosieroj, sed g\u0302i devas rekoni klas dosierojn."}, {"text_idx": "#000012", "text": "La klass\u0302argilo elfaras tri bazajn agadojn en tiu strikta sinsekvo:"}, {"text_idx": "#000013", "text": "S\u0302arg\u0302ado: trovaj\u0302oj kaj importado la binaraj datenoj por tipo\nLigado: prezentas konfirmon, preparon, kaj (lau\u0306vole) rezolucionKonfirmo: certigas la korektecon de la importita tipo\nPreparo: asignas memoron por klasvariabloj kaj initializing la memoron al normalvaloroj\nRezolucio: transformas simbolajn referencojn de la tipo en rektajn referencojn.\nInicialigo: alvokas Java kodon kiu initialigas klasvariablojn al iliaj bonordaj startvaloroj."}, {"text_idx": "#000014", "text": "Konfirmo: certigas la korektecon de la importita tipo\nPreparo: asignas memoron por klasvariabloj kaj initializing la memoron al normalvaloroj\nRezolucio: transformas simbolajn referencojn de la tipo en rektajn referencojn."}, {"text_idx": "#000015", "text": "G\u0302enerale, ekzistas du specoj de klass\u0302argilo: bots\u0302ekla klass\u0302argilo kaj uzanto difinis klass\u0302argilon."}, {"text_idx": "#000016", "text": "C\u0302iu Java virtuala mas\u0302inefektivigo havendaj\u0302o bots\u0302eklan klass\u0302argilon, kapablan je s\u0302arg\u0302adaj fidindaj klasoj.\nLa Java virtuala mas\u0302inspecifo ne precizigas kiel klass\u0302argilo devus lokalizi klasojn."}, {"text_idx": "#000017", "text": "La JVM funkciigas sur primitivaj valoroj (entjeroj kaj glitkomaj nombroj) kaj referencoj.\nLa JVM estas principe 32-bita mas\u0302ino.longkajdoubletipoj, kiuj estas 64-bits, estas apogitaj indig\u0302ene, sed konsumas du ekzemplerojn de stokado en la lokaj variabloj au\u0306 operaciantostako de kadro, c\u0302ar c\u0302iu unuo estas 32 bitoj.boolean, byte, short, kajchartipoj estas tute signo-plilongigitaj (kromcharkiu estas nul-plilongigita) kaj funkciiganta kiel 32-bitaj entjeroj, la sama kielinttipoj.\nLa pli malgrandaj tipoj nur havas kelkajn tip-specifajn instrukciojn por s\u0302arg\u0302ado, stokante, kaj tipkonverton.booleanestas ne konata entute al la JVM;\nbu-sonoblikvecoj estas funkciigis sur kiel 8-bitebytevaloroj, kun 0 reprezentadofalsekaj 1 reprezentadotrue."}, {"text_idx": "#000018", "text": "La JVM havas rub-trankvilan stakon por stokado de objektoj kaj aroj.\nKodo, konstantoj, kaj aliaj klasdatenoj estas stokitaj en la \"metodareo\".\nLa metodareo estas logike parto de la stako, sed efektivigoj povas trakti la metodareon aparte de la stako, kaj ekzemple povo ne rubon kolekti g\u0302in.\nC\u0302iu JVM-fadeno ankau\u0306 havas it propran vokstakon (nomitan \"Java Virtual Machine stack\" por klareco), kiu stokas kadrojn.\nNova kadro estas kreita c\u0302iun fojon kiam metodo estas nomita, kaj la kadro kiam estas detruita tiuj metodelirejoj."}, {"text_idx": "#000019", "text": "C\u0302iu kadro disponigas \"operaciantostakon\" kaj aron de \"lokaj variabloj\".\nLa operaciantostako estas uzita por operaciantoj al komputadoj kaj por ricevado de la revenvaloro de nomita metodo, dum lokaj variabloj helpas la saman al kiel registroj kaj ankau\u0306 kutimas pasigi metodargumentojn.\nTiel, la JVM estas kaj stakmas\u0302ino kaj registromas\u0302ino."}, {"text_idx": "#000020", "text": "La JVM havas instrukciojn por la sekvaj grupoj de taskoj:"}, {"text_idx": "#000021", "text": "C\u0302iu speciala mastro operaciumo bezonas sian propran efektivigon de la JVM kaj rultempon.\nTiuj JVMoj interpretas la Bajtkodon semantike lau\u0306 la saman manieron, sed la fakta efektivigo povas esti malsama.\nPli da komplekso ol j\u0302us kopiado Bajtkodo estas kongrue kaj efike efektiviganta la Java kernon Api kiu devas esti mapita al c\u0302iu mastro-operaciumo."}, {"text_idx": "#000022", "text": "Tiu instrukciaj\u0302o operacias aktoraro de komunpas\u0302tejo distritaj datenoj tajpas prefere la indig\u0302enajn datentipojn de iu specifa instrukciseriarkitekturo."}, {"text_idx": "#000023", "text": "JVM-lingvo estas ajna lingvo kun funkcieco kiu povas esti esprimita lau\u0306 valida klasdosiero kiu povas esti gastigita fare de la Java Virtuala Mas\u0302ino.\nKlasdosiero enhavas Java Virtual Machine-instrukciaj\u0302on ( Java bajtkodo) kaj simboltablon, same kiel aliajn flankinformojn.\nLa klasa dosierformato estas la hardvaro- kaj operaciumo-sendependa binara formato kutimis reprezenti kompilitajn klasojn kaj interfacojn."}, {"text_idx": "#000024", "text": "Ekzistas pluraj JVM-lingvoj, ambau\u0306 ag\u0302aj lingvoj adaptis al JVM kaj tute novajn lingvojn.\nJRuby kaj Jython eble estas la plej bonkonataj havenoj de ekzistantaj lingvoj, t.e. Ruby kaj Python respektive.\nDe la novaj lingvoj kiuj estis kreitaj de komence por kompili al Java Bajtkodo, Clojure, Apache Groovy, Scala kaj Kotlin povas esti la plej popularaj tiajn.\nRimarkinda trajto kun la JVM-lingvoj estas ke ili estas kongruaj kun unu la alian, tiel ke, ekzemple, Scala bibliotekoj povas esti uzitaj kun Java programoj kaj inverse."}, {"text_idx": "#000026", "text": "Baza filozofio de Java estas ke g\u0302i estas esence protektita de la starpunkto kiun neniu uzantoprogramo povas kras\u0302i la mastro-mas\u0302inon au\u0306 alie influas malkonvene aliajn operaciojn sur la mastro-mas\u0302ino, kaj ke estas eble protekti certajn metodojn kaj datenstrukturojn apartenantajn al fidinda kodo de aliro au\u0306 korupto per nefidita kodefektivigo ene de la sama JVM.\nKrome, oftaj programisteraroj kiuj ofte kondukis al datenkorupto au\u0306 neantau\u0306videbla konduto kiel ekzemple alirado de la fino de aro au\u0306 uzado de neiniciigita montrilo ne estas permesitaj okazi.\nPluraj ecoj de Java kombinas por disponigi tiun sekurecon, inkluzive de la klasmodelo, la rub-trankvila stako, kaj la konfirmilon."}, {"text_idx": "#000027", "text": "La JVM konfirmas c\u0302iun Bajtkodon antau\u0306 ol g\u0302i estas efektivigita.\nTiu konfirmo konsistas c\u0302efe el tri specoj de kontroloj:"}, {"text_idx": "#000028", "text": "Branc\u0302oj c\u0302iam estas al validaj lokoj\nDatenoj c\u0302iam estas initialigitaj kaj referencoj c\u0302iam estas tip-sekuraj\nAliro al malpubliko au\u0306 pakaj\u0302o privataj datenoj kaj metodoj estas rigide kontrolitaj"}, {"text_idx": "#000029", "text": "La unuaj du el tiuj c\u0302ekoj okazas c\u0302efe dum la konfirmpas\u0302o kiu okazas kiam klaso farig\u0302as s\u0302arg\u0302ita kaj elektebla por uzo.\nLa tria estas c\u0302efe farita dinamike, kiam datenobjektoj au\u0306 metodoj de klaso unue estas aliritaj fare de alia klaso."}, {"text_idx": "#000030", "text": "La konfirmilo permesas nur kelkajn Bajtkodsekvencojn en validaj programoj, ekz. salto (branc\u0302o) instrukcio povas nur celi instrukcion ene de la sama metodo.\nKrome, la konfirmilo certigas ke c\u0302iu antau\u0306fiksita instrukcio funkciigas sur fiksa stakloko, [10] permesante al la JIT-kompililo transformi stakalirojn en fiksajn registralirojn.\nPro tio, ke la JVM estas stako arkitekturo ne implicas rapidecpunon por kopiado pri registro-bazitaj arkitekturoj dum uzado de JIT-kompililo.\nSpite al la kod-konfirmita JVM-arkitekturo, g\u0302i faras neniun diferencon al JIT-kompililo c\u0302u g\u0302i estas nomita imagaj registroj au\u0306 imagaj stakpozicioj kiuj devas esti asignitaj al la registroj de la celarkitekturo.\nFakte, kodkonfirmo igas la JVM diferenca de klasika stakarkitekturo, de kiu efika kopiado per JIT-kompililo estas pli d komplika kaj tipe arang\u0302ita fare de pli malrapida interpretisto."}, {"text_idx": "#000031", "text": "La origina specifo por la Bajtkodkonfirmilo uzis naturan lingvon kiu estis nekompleta au\u0306 malg\u0302usta en kelkaj rilatoj.\nKelkaj provoj estis faritaj por precizigi la JVM kiel formala sistemo.\nFarante tion, la sekureco de aktualaj JVM-efektivigoj povas pli plene esti analizita, kaj ebla sekureco ekspluatas preventita.\nAnkau\u0306 estos eble optimumigi la JVM transsaltante nenecesajn sekurecokontrolojn, se la aplikig\u0302o estanta prizorgita estas pruvita esti sekura."}, {"text_idx": "#000032", "text": "Virtuala mas\u0302inarkitekturo permesas tre fajngrajnan kontrolon de la agoj kiujn tiu kodo ene de la mas\u0302ino estas lica preni.\nG\u0302i supozas ke la kodo estas \"semantike\" g\u0302usta, t.e., g\u0302i sukcese pasigis la (formalan) Bajtkodan konfirmilprocezon, realigitan per ilo, eventuale ekster-estraro la virtuala mas\u0302ino.\nTio estas dizajnita por permesi sekuran plenumon de nefidita kodo de malproksimaj fontoj, modelo utiligita per Java apletoj, kaj alia sekura kodo els\u0302utas.\nPost kiam bytecode-konfirmite, la els\u0302utita kodo kuras en limigita \" sablokesto \", kiu estas dizajnita por protekti la uzanton de konstrua au\u0306 malica kodo.\nKiel aldono al la Bajtkoda konfirmprocezo, eldonistoj povas ac\u0302eti atestilon kun kiu ciferece subskribi apletojn kiel mons\u0302rankoj, donante al ili permeson peti al la uzanto krevi el la sablokesto kaj aliro la lokan dosiersistemon, tondejon, ekzekutas eksterajn pecojn de softvaro, au\u0306 reton."}, {"text_idx": "#000034", "text": "Bajtkoda interpretilo kaj ekzakte g\u0302ustatempa kompililo"}, {"text_idx": "#000035", "text": "Por c\u0302iu hardvararkitekturo malsama Java bajtkoda interpretilo estas necesa.\nKiam komputilo havas Java bajtkodan interpretilon, g\u0302i povas prizorgi ajnan Java Bajtkodprogramon, kaj la sama programo povas esti prizorgita sur iun komputilon kiu havas tia interpretiston."}, {"text_idx": "#000036", "text": "Kiam Java Bajtkodo estas efektivigita fare de interpretisto, la ekzekuto c\u0302iam estos pli malrapida ol la plenumo de la sama programo kompilis en indig\u0302enan mas\u0302inlingvon.\nTiu problemo estas mildigita de ekzakte g\u0302ustatempaj (JIT) kompililoj por efektivigado de Java Bajtkodo.\nJIT-kompililo povas traduki Java Bajtkodon en indig\u0302enan mas\u0302inlingvon ruligante la programon.\nLa tradukitaj partoj de la programo tiam povas esti efektivigitaj multe pli rapide ol ili povus esti interpretitaj.\nTiu tekniko estas aplikita al tiuj partoj de programo ofte efektivigis.\nTiun manieron JIT-kompililo povas signife akceli la totalan ekzekuttempon."}, {"text_idx": "#000037", "text": "Ekzistas neniu necesa ligo inter la java kaj Java Bajtkodo.\nProgramo skribita en Java povas esti kompilita rekte en la mas\u0302inlingvon de reala komputilo kaj programas skribite en aliaj lingvoj ol Java povas esti kompilita en Java Bajtkodon."}, {"text_idx": "#000038", "text": "Java Bajtkodo estas celita esti platformo-sendependa kaj certigi.\nKelkaj JVM-efektivigoj ne inkludas interpretiston, sed konsistas nur el ekzakte g\u0302ustatempa kompililo."}, {"text_idx": "#000039", "text": "Ekde la tre fruaj stadioj de la dezajnprocezo, Java (kaj JVM) estis surmerkatigita kiel interretteknologio por kreado de Rich Internet Applications."}, {"text_idx": "#000040", "text": "Sur la klientoflankon, tTT-legiloj povas esti etenditaj kun NPAPI Java aldonaj\u0302o kiu efektivigas tiel nomis Java apletojn integrig\u0302intaj en HTML-pag\u0302ojn.\nLa apleto estas permesita uzi en rektangulan regionon la pag\u0302on asignitan al g\u0302i kaj uzo limigitan aron de APIoj kiuj permesas ekzemple aliron al la mikrofono de uzanto au\u0306 3D akceladon.\nAdobe Flash Player, la c\u0302efa konkuranta teknologio, laboras en lau\u0306 la saman manieron en tiu rilato.\nJava kiun apletoj ne estas limigitaj al Javo kaj g\u0302enerale povas esti kreita en iu JVM-lingvo."}, {"text_idx": "#000042", "text": "En junio 2015 [g\u0302isdatigo] lau\u0306 W3Teks, Java apletuzo falis al 0.1% de c\u0302iuj retejoj.\nFulmo falis al 10.8% kaj Silverlight al 0.1% de retejoj."}, {"text_idx": "#000043", "text": "JavaPoly permesas al retejoj uzi kontrolitajn nemodifitajn Java bibliotekojn, ec\u0302 se la uzanto ne havas Java instalita sur ilia komputilo."}, {"text_idx": "#000044", "text": "Kompilante la JVM-Bajtkodon, kiu estas universala en tuta JVM-lingvoj, permesas konstrui sur la ekzistanta kompililo de la lingvo al Bajtkodo."}, {"text_idx": "#000045", "text": "Java Runtime Environment de Oracle"}, {"text_idx": "#000048", "text": "Al akcelada kodekzekuto, Retpunkto dependas de ekzakte g\u0302ustatempa kompilo.\nAl akceladobjektasigno kaj rubkolekto, Retpunkto uzas generacian stakon."}, {"text_idx": "#000049", "text": "La Java virtuala mas\u0302instako estas la areo de memoro utiligita fare de la JVM por dinamika memorasigno."}, {"text_idx": "#000050", "text": "En Retpunkto la stako estas dividita en generaciojn:"}, {"text_idx": "#000051", "text": "La junulgeneracio stokas mallongdau\u0306rajn objektojn kiuj estas kreitaj kaj tuj rubo kolektis.\nObjektoj kiuj dau\u0306ras pli longe estas proponitaj al la malnova generacio (ankau\u0306 anoncis la permanentofican generacion).\nTiu memoro estas subdividita en (du) pluvivantospacojn kie la objektoj kiuj postvivis la unua kaj venontaj rubkolektoj estas stokitaj."}, {"text_idx": "#000052", "text": "La permanenta generacio (au\u0306 ondumadinformo) estis uzita por klas difinoj kaj rilataj metadatenoj antau\u0306 Java 8-a Ondumaj\u0302generacio ne estis parto de la stako.\nLa permanenta generacio estis forigita de Java 8."}, {"text_idx": "#000053", "text": "Origine ekzistis neniu permanenta generacio, kaj objektoj kaj klasoj estis stokitaj kune en la sama areo.\nSed c\u0302ar klasmals\u0302arg\u0302ado multe pli malofte ol objektoj estas trankvilaj okazas, movi klasstrukturojn al specifa areo permesis signifajn spektakloplibonigojn."}, {"text_idx": "#000054", "text": "JRE de orakolo estas instalita sur granda nombro da komputiloj.\nEkde iu reto pag\u0302igas la uzantvizitojn povas prizorgi Java apletojn, Java disponigas facile alireblan ataksurfacon al malicaj retejoj kiujn la uzanto vizitas.\nKaspersky-Laboratorioj raportas ke la Java tTT-legilaldonaj\u0302o estas la metodo de elekto por komputilkrimuloj.\nJava kiun atingoj estas inkluditaj en multaj ekspluatas pakojn kiujn retpiratoj deplojas sur hakitaj retejoj."}, {"text_idx": "#000055", "text": "En la pasinteco, finuzantoj ofte uzis malmodernan version de JRE kiu estis minacata per multaj konataj atakoj.\nTio kondukis al la vaste komuna kredo inter uzantoj ke Java estas esence nesekura.\nEkde Java 1.7, JRE de Oracle por Fenestroj inkludas au\u0306tomatan g\u0302isdatigfunkciecon."}, {"text_idx": "#000058", "text": "Klarigoj kaj Amendoj al la Java Virtual Machine Specification, Dua Eldono inkludas liston de s\u0302ang\u0302oj por esti faritaj por apogi J2SE 5.0 kaj JSR 45\nJSR 45, precizigas s\u0302ang\u0302ojn al la klasa dosierformato al subteno-font-nivela senararigado de lingvoj kiel ekzemple JSP (JSP) kaj SQLJ kiuj estas tradukitaj al Javo"}, {"text_idx": "#000061", "text": "Ordinara Evoluo kaj Distribution License"}]