Siirry sisältöön

Java-virtuaalikone

Wikipediasta
Tämä on arkistoitu versio sivusta sellaisena, kuin se oli 30. maaliskuuta 2023 kello 19.45 käyttäjän Janerikmerio (keskustelu | muokkaukset) muokkauksen jälkeen. Sivu saattaa erota merkittävästi tuoreimmasta versiosta.
Yleiskatsaus Java-virtuaalikoneen (JVM) arkkitehtuuriin, joka perustuu Java SE 7 Edition -spesifikaatioon.

Java-virtuaalikone (JVM) on abstrakti kone (virtuaalikone), joka suorittaa sille käännettyjä Java-ohjelmia.[1] Virtuaalikone on toteutettu ohjelmallisesti oikean laitteiston ja käyttöjärjestelmän päällä ajettavaksi.[1] Java-kielellä tehdyt ohjelmat käännetään tavukoodiksi ja suoritetaan JVM:llä oikeassa ympäristössä.[1]

Java-virtuaalikoneen avulla voidaan ajaa myös eräillä muilla ohjelmointikielillä tehtyjä ohjelmia, jotka on käännetty JVM:n tukemaksi tavukoodiksi. JVM-spesifikaatio (engl. JVM Specification) kuvaa JVM-toteutuksen formaaliset vaatimukset. Spesifikaatio varmistaa Java-ohjelmien yhteentoimivuuden eri toteutusmuodoissa, jotta Java-kehitystyökaluja (JDK) käyttävien ohjelmiston kehittäjien ei tarvitse huolehtia taustalla olevan laitteistoalustan erilaisuuksista.

JVM:n tukemat kielet

JVM-kieliä on useita. JRuby ja Jython ovat kenties tunnetuimpia JVM-käännöksiä Ruby ja Python -kielistä. Java-tavukoodiksi kääntyviä vakiintuneita kieliä ovat muun muassa Clojure, Apache Groovy, Scala ja Kotlin. JVM-kielten merkittävä piirre on, että ne ovat yhteensopivia toistensa kanssa, joten esimerkiksi Scala-kirjastoja voidaan käyttää Java-ohjelmien kanssa ja päinvastoin. [2]

Java Runtime Environment

Java Runtime Environment (JRE) on vapaasti saatavilla oleva ohjelmisto, joka sisältää itsenäisen virtuaalikoneen (HotSpot), standardikirjaston (Java Class Library), ja konfigurointiohjelman. Se on yleisin JVM-ajoympäristö.

Avoimen lähdekoodin ympäristöjä ovat OpenJDK GPL-2.0 ohjelmistolisenssillä linkittämispoikkeuksella ja Eclipse (aikaisemmin IBM) OpenJ9.

Android-käyttöjärjestelmää käyttävät järjestelmät kääntävät ohjelmat Android Runtime (ART) -ajoympäristölle, joka kääntää ohjelmaa natiiville konekielelle: aiemmin Androidissa on käytetty Dalvik-virtuaalikonetta.[3][4][5]

JVM verkkoselaimessa

Kun Java-alusta oli vielä vasta elinkaarensa alussa, JVM:ää markkinoitiin verkkoteknologiana Rich Web Applications -sovellusten luomiseen. Vuodesta 2018 lähtien useimpien verkkoselaimien ja verkkoselaimia yhdistävien käyttöjärjestelmien mukana ei toimiteta Java-laajennusta, eivätkä ne sallineet muiden kuin Flash -laajennusten sivulatausta . Java-selainlaajennus poistettiin käytöstä JDK 9:ssä

NPAPI Java-selainlaajennus oli suunniteltu sallimaan JVM suorittaa niin sanottuja Java-sovelmia, jotka on upotettu HTML-sivuille. Selaimille, joihin laajennus on asennettu, sovelma voi piirtyä sille osoitetun sivun suorakaiteen muotoiseen alueeseen. Koska laajennus sisältää JVM:n, Java-sovelmat eivät rajoitu vain Java-ohjelmointikieleen, sillä mikä tahansa JVM:ään kohdistettu kieli voi toimia laajennuksessa. Rajoitettu joukko sovellusliittymiä sallii sovelmien pääsyn käyttäjän mikrofoniin tai 3D-kiihdytykseen, vaikka sovelmat eivät pysty muokkaamaan sivua sen suorakulmaisen alueen ulkopuolella. Adobe Flash Player, tärkein kilpaileva teknologia, toimii samalla tavalla tässä suhteessa.

Kesäkuuhun 2015 mennessä, W3Techsin mukaan Java-sovelman ja Microsoft Silverlightin käyttö oli pudonnut 0,1 prosenttiin kaikilla verkkosivuilla, samaan aikaan Flashin käyttö oli pudonnut 10,8 prosenttiin.

JavaScript JVM:t ja tulkit [ muokkaa lähdettä ]

Toukokuusta 2016 lähtien JavaPoly sallii käyttäjien tuoda muokkaamattomia Java-kirjastoja ja kutsua niitä suoraan JavaScriptistä. JavaPoly sallii verkkosivustojen käyttää muokkaamattomia Java-kirjastoja, vaikka käyttäjän tietokoneeseen ei olisi asennettu Java.

Käännös JavaScriptiin [ muokkaa lähdettä ]

JavaScript-suoritusnopeuteen jatkuvat parannukset sekä mobiililaitteiden lisääntynyt käyttö, joiden verkkoselaimet eivät tue laajennuksia, on pyritty kohdistamaan nämä käyttäjät JavaScriptiin kääntämisen avulla. On mahdollista kääntää joko lähdekoodi tai JVM-tavukoodi JavaScriptiksi.

JVM-tavukoodin kääntäminen, joka on universaali kaikissa JVM-kielissä, mahdollistaa kielen olemassa olevan kääntäjän pohjalta tavukoodauksen. Tärkeimmät JVM-tavukoodit JavaScript-kääntäjiin ovat TeaVM,  Dragome Web SDK:n sisältämä kääntäjä,  Bck2Brwsr,  ja j2js-kääntäjä.

Johtavia kääntäjiä JVM-kielistä JavaScriptiin ovat Java-JavaScript-kääntäjä, joka sisältyy Google Web Toolkit -työkaluihin , Clojurescript (Clojure), GrooScript (Apache Groovy), Scala.js (Scala) ja muihin.

Lähteet

  1. a b c The lean, mean, virtual machine javaworld.com. Viitattu 29.2.2020. (englanniksi)
  2. Tim Lindholm, Frank Yellin: Clarifications and Amendments to the Java Virtual Machine Specification, Second Edition The JavaTM Virtual Machine Specification, Second Edition, https://docs.oracle.com/javase/specs/jvms/se6/html/VMSpecTOC.doc.html. Viitattu 18.11.2015.
  3. Experimental Google ART runtime in Android KitKat can bring twice faster app executions phonearena.com. 7.11.2013. Viitattu 29.2.2020. (englanniksi) 
  4. Platform Architecture developer.android.com. Viitattu 29.2.2020. (englanniksi) 
  5. Implementing ART Just-In-Time (JIT) Compiler source.android.com. Viitattu 29.2.2020. (englanniksi)