Java-virtuaalikone

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ä.[6]
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.[7]
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[8], Dragome Web SDK:n[9] sisältämä kääntäjä, Bck2Brwsr[10], ja j2js-kääntäjä.[11]
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[12].
Lähteet
- ↑ a b c The lean, mean, virtual machine javaworld.com. Viitattu 29.2.2020. (englanniksi)
- ↑ 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.
- ↑ Experimental Google ART runtime in Android KitKat can bring twice faster app executions phonearena.com. 7.11.2013. Viitattu 29.2.2020. (englanniksi)
- ↑ Platform Architecture developer.android.com. Viitattu 29.2.2020. (englanniksi)
- ↑ Implementing ART Just-In-Time (JIT) Compiler source.android.com. Viitattu 29.2.2020. (englanniksi)
- ↑ Ars Staff: Oracle deprecates the Java browser plugin, prepares for its demise Ars Technica. 28.1.2016. Viitattu 30.3.2023. (englanniksi)
- ↑ Historical yearly trends in the usage statistics of client-side programming languages for websites, March 2023 w3techs.com. Viitattu 30.3.2023.
- ↑ TeaVM teavm.org. Viitattu 30.3.2023.
- ↑ ** DRAGOME.COM ** www.dragome.com. Viitattu 30.3.2023.
- ↑ Bck2Brwsr - APIDesign wiki.apidesign.org. Viitattu 30.3.2023.
- ↑ wolfgang kuehn: decatur/j2js-compiler github.com. 28.1.2023. Viitattu 30.3.2023.
- ↑ List of languages that compile to JS GitHub. Viitattu 30.3.2023. (englanniksi)