Java Virtual Machine

Java-logo

Den Java Virtual Machine (forkortet til Java VM eller JVM ) er den delen av Java Runtime Environment (JRE) for Java- programmer som er ansvarlig for gjennomføring av Java bytecode . Normalt kjøres hvert startede Java-program i sin egen virtuelle maskin (VM). Den andre delen av Java-kjøretidsmiljøet er Java- klassebibliotekene .

JVM fungerer som et grensesnitt til maskinen og operativsystemet og er tilgjengelig for de fleste plattformer (f.eks. Linux , macOS , Palm OS , Solaris , Windows , z / OS , etc.). JVM er for det meste skrevet på programmeringsspråkene C eller C ++ .

Komponentene til JVM er

  • klasselaster ( klasselaster og resolver ),
  • minnehåndtering og søppelinnsamling ( søppelinnsamling ), og
  • Execution motor .

Arbeidsprinsipp

Bytecode generert av Java-kompilatoren ( plattformuavhengig ) kjøres av en plattformavhengig Java virtuell maskin. De genererte bytecode-filene (filtypen “.class”) blir oversatt til det lokale maskinspråket i løpet av kjøretiden . Den virtuelle maskinen fungerer som en tolk , men er mye raskere, siden z. B. det er ikke behov for flere syntakskontroller .

Sikkerhetsfordeler

I tillegg til plattformuavhengigheten til bytekoden, tilbyr Java Virtual Machine også økt sikkerhet. Den overvåker kjøringen av programmet i løpetid, og forhindrer for eksempel bufferoverløp , noe som fører til uforutsigbar oppførsel som programmet krasjer. I spesielle tilfeller av Java er denne overvåkingen veldig enkel, siden Java ikke direkte støtter pekere (bare implisitt).

Optimaliseringsprosedyre

Kjøringshastigheten (engelsk ytelse ) av Java-programmer for å øke, de fleste Java-VM-er som heter JIT compiler on (JITC) umiddelbart under programutførelse, bytekoden " J ust I n T " Just in time "ime" (, eller "Just at rett tid ") oversettes permanent til maskinkode . En videreutvikling av denne tilnærmingen er hotspot-optimalisereren fra Sun , som fungerer med dynamisk optimalisering.

Dynamisk optimalisering

Ofte på tidspunktet for samlingen ikke kjent hvilken spesifikk inngang en programvare må behandle. Som et resultat må programvaren håndtere alle typer input. Inndata lagres derfor i variabler . Etter at programmet er startet, endres imidlertid ikke mange variabler lenger. Som et resultat er dette konstanter fra et tidspunkt rett etter starten. Hvis programvaren for systemarkitekturen bare er samlet etter dette tidspunktet (dette er tilfellet med Java Hotspot), kan disse konstantene tas i betraktning. Enkelte grener som bare er avhengige av slike "halvkonstanter" er da for alltid unike og utgjør derfor ikke en risiko for feil forutsigelse av grenen . En slik programkode kan derfor løpe raskere enn koden som ble samlet på et tidligere tidspunkt.

Implementeringer i maskinvare

Hardware versjoner er Java-prosessorer , mikroprosessorer som bruker Java bytecode som maskinspråk. De kunne ikke seire mot den raske økningen i ytelsen til standard PC-er og JVM-er.

Foreclosure av trådene

Java VM isolerer prosessene som kjører i den fra operativsystemet (grønne tråder). Som standard tilordner den Java- tråder til tråder i operativsystemet. Trådadministrasjon utføres bare av Java VM i unntakstilfeller. Dette betyr at det også er mulig å tilby en Java VM med full funksjonalitet på et operativsystem som ikke støtter multitrading.

Java VM har alltid full og standardkompatibel suverenitet over Java-trådene, dvs. H. programmereren trenger ikke å vurdere operativsystemspesifikke egenskaper for multi-threading / tasking / prosessering og kan alltid stole på JRE . Ulempen er at problemer som kommer fra en tråd tilordnes hele prosessen av operativsystemet. Vanlige operativsystemer (for eksempel Linux, Windows) tillater kontroll av disse "innfødte" trådene, om nødvendig ved hjelp av tredjepartsprogramvare, for eksempel VisualVM som følger med JDK . Standardverktøy som Windows Task Manager viser imidlertid ikke systemtråder.

JVM-språk

I tillegg til Java er det også andre språk som kan brukes som programmeringsspråk for JVM-programmer. Følgende språk kan blant annet kjøre på en JVM:

  • Clojure , en Lisp- dialekt,
  • Ceylon ,
  • Concurnas, et programmeringsspråk med flere paradigmer for samtidige , distribuerte og reaktive applikasjoner, med Python-lignende syntaks, støtte for GPU-databehandling og administrasjon av hukommelse utenfor heap.
  • Erjang, en Erlang- dialekt for JVM,
  • Free Pascal , som også støtter en stor del av Object Pascal- konstruksjonene under JVM ,
  • Groovy , et veldig Java-lignende, statisk og dynamisk skrevet programmeringsspråk
  • JRuby , en nesten Ruby- kompatibel implementering,
  • Jython (tidligere: JPython), en ren Java-implementering av Python-programmeringsspråket,
  • Hyggelig , utfyller Java med parametriske typer, anonyme funksjoner, multimetoder, tupler og valgfrie parametere.
  • Scala , et språk som kombinerer funksjoner på Java med funksjonell programmering,
  • Kotlin , et språk introdusert av JetBrains i 2011

Det er også en rekke skriptspråk som kan kalles fra Java. Dette inkluderer JavaScript (i mellomtiden standardisert som ECMAScript) med "Rhino" -tolken (et Mozilla-prosjekt) opp til versjon 7 eller med "Nashorn" -tolken fra versjon 8. JavaFX inneholdt også en skriptfunksjon i versjon 1.x. Språk hovedsakelig for grafiske elementer, men fra versjon 2.0 er den implementert i ren Java.

Kompilering i JavaScript

Med den kontinuerlige forbedringen i JavaScript-kjøringshastighet, kombinert med økt bruk av mobile enheter hvis nettlesere ikke støtter plugins, blir det gjort et forsøk på å målrette disse brukerne ved å kompilere i JavaScript. Det er mulig å kompilere kildekoden eller JVM bytecode i henhold til JavaScript.

Sammensetningen av JVM bytecode, som er universell for alle JVM-språk, gjør det mulig å bygge på den eksisterende kompilatoren av språket og å lage bytecode. De viktigste JVM-bytekodene for JavaScript-kompilatorer er TeaVM, kompilatoren i Dragome Web SDK, Bck2Brwsr og j2js kompilator.

Ledende JVM-språk til JavaScript-kompilatorer inkluderer Java til JavaScript-kompilatoren i Google Web Toolkit , Clojurescript (Clojure) , GrooScript (Apache Groovy) , Scala.js (Scala) og andre.

Se også

weblenker

Commons : Java Virtual Machine  - samling av bilder, videoer og lydfiler

Individuelle bevis

  1. Concurnas: det nye språket på JVM for samtidig og GPU-databehandling. I: InfoQ.com. C4Media Inc., åpnet 25. juni 2020 .
  2. Concurnas programmeringsspråk. Concurnas Ltd., åpnet 25. juni 2020 .
  3. ^ Det fine programmeringsspråket. Tilgang 15. august 2019 .
  4. Kotlin: Første tilstedeværelse på nettet for JetBrains JVM-språk , it- Republik.de, åpnet 22. juli 2012
  5. TeaVM: Bygg raske, moderne webapper i Java. Hentet 23. oktober 2019 .
  6. Dragome Web SDK. Hentet 23. oktober 2019 .
  7. Bck2Brwsr - APIDesign. Hentet 23. oktober 2019 .
  8. GitHub - decatur / j2js-compiler: En Java Bytecode til JavaScript Cross-Compiler. I: GitHub. Hentet 23. oktober 2019 .
  9. Liste over språk som kompileres til JS jashkenas / coffeescript Wiki GitHub. Github.com, åpnet 26. juni 2015 .
  10. PreonVM | Preon32 Series Virtual Machine. Hentet 10. november 2017