Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Luku 12 Java-ohjelmien suoritus

Samankaltaiset esitykset


Esitys aiheesta: "Luku 12 Java-ohjelmien suoritus"— Esityksen transkriptio:

1 Luku 12 Java-ohjelmien suoritus
Java-ohjelman suoritus, tulkinta ja kääntäminen 03/01/2019

2 Java-ohjelmien suoritus
Java-ohjelma käännetään ensin tavukoodiksi tavukoodi voidaan suorittaa hypoteettisella Java-virtuaalikoneella kääntämällä se suorittavan koneen omalle konekielelle tai mutkan kautta kääntämällä ensin jollekin korkean tason kielelle (esim. C:lle) ja siitä koneen omalle konekielelle Java JIT-käännös (just in time) kääntää ja tulkitsee tarpeen mukaan 03/01/2019 Liisa Marttinen kevät 2005

3 Java-ohjelmien suoritus (Teemu Kerolan luennoista 2000)
k = i+j; Java-ohjelma Java-ohjelmien suoritus (Teemu Kerolan luennoista 2000) Java- käännös iload i iload j iadd istore k Java byte-koodi (JIT) käännös Pentium II -suoritin lataus- moduuli data natiiviympäristö Java- suoritin iload i iload j iadd istore k instr data Java-virtuaalikone Java- tulkki Pentium II -suoritin SW HW SW HW SW HW ( esimerkiksi) 03/01/2019 Liisa Marttinen kevät 2005

4 Java-virtuaalikone (JVM)
geneerinen suoritin, jota todelliset suorittimet helposti pystyvät simuloimaan abstrakti kone (vrt. TTK-91) tietorakenteet rekisterit, pino, keko metodialue käskyt 226 käskyä a 32 bittiä (vrt. TTK-91:n käskyt) 03/01/2019 Liisa Marttinen kevät 2005

5 JVM-pino tavallinen pino (vrt. AT-pino)
johon talletetaan kehyksiä (frames) (vrt. aktivointitietue) ja operandeja pinoa käytetään vain push/pop-operaatioillla voi olla rajallisen kokoinen tai dynaamisesti laajennettavissa eikä tarvitse yhtenäistä muistialuetta allokoidaan keosta (heap) tila loppu  StackOverflowError, OutOfMemoryError 03/01/2019 Liisa Marttinen kevät 2005

6 kaikille virtuaalikoneen säikeille yhteinen
JVM-keko (JVM heap kaikille virtuaalikoneen säikeille yhteinen luodaan virtuaalikoneen käynnistyessä ei tarvitse yhtenäistä muistialuetta voi olla kiinteä tai laajennettavissa jos tila loppuu, niin  OutOfMemoryError automaattinen roskienkeruu (garbage collector) ei-käytössä oleva (eli vapautettu) muistialue palautetaan uusiokäyttöön (vapaaksi) ei tarvita erikseen free-operaatiota Java-ohjelmassa voi hidastaa suoritusta milloin vain 03/01/2019 Liisa Marttinen kevät 2005

7 JVM-metodialue (JVM Method Area) yhteinen kaikille JVM-säikeille
luodaan koneen käynnistyessä vastaa tavallista kääntäjän tuottamaa koodisegmenttiä metodien ja konstruktoreiden koodi ilmentymien alustuskoodi vakioallas loogisesti osa JVM-kekoa 03/01/2019 Liisa Marttinen kevät 2005

8 Javan suoritusaikainen vakioallas
(runtime constant pool) joka luokalle (class) tai liittymälle (interface) omansa luodaan kun luokka tai liittymä luodaan vastaa jossain määrin tavallista symbolitaulua, vaikka sisältääkin laajemmalti dataa useita erilaisia vakioita (käännösaikaiset literaalit, suoritusaikana ratkottavat attribuutit, …) suoritusaikainen esitystapa tiedoston class constant_pool -taulukolle talletetaan JVM-metodialueelle 03/01/2019 Liisa Marttinen kevät 2005

9 Natiivimetodien pinot (Native Method Stacks)
toteutus voi käyttää tavallisia pinoja (”C stacks”) sellaisten natiivimetodien tukena, joita ei ole kirjoitettu Javalla käytetään myös Java-tulkin toteutuksessa ei tarvita JVM-toteutuksissa, joissa ei ole natiivimetodeja 03/01/2019 Liisa Marttinen kevät 2005

10 JVM-rekisterit PC osoittaa johonkin JVM-metodialueelle
CPP osoittaa vakioaltaaseen LV on paikallisten muuttujien kantaosoite (vähän kuten FP ttk-91:ssä) SP osoittaa JVM-operandipinon huipulle kaikki rekisterit implisiittisiä; niitä ei erikseen nimetä JVM -konekäskyissä 03/01/2019 Liisa Marttinen kevät 2005

11 talletetaan JVM-pinoon
JVM- kehys (frame) kehystä käytetään datan ja välitulosten tallettamiseen parametrien ja paluuarvojen välitykseen dynaamisen linkityksen toteuttamiseen keskeytysten toteuttamiseen uusi kehys luodaan metodin kutsun yhteydessä, vapautetaan metodista poistuttaessa current frame, current method, current class operaatiot suhteessa nykykehykseen (vrt. TTK-91) talletetaan JVM-pinoon 03/01/2019 Liisa Marttinen kevät 2005

12 Paikalliset muuttujat (local variables)
Kukin kehys sisältää muuttujataulukon eli sen paikalliset muuttujat (LV) viittaukset indeksoituna taulukon LV suhteen (0:sta alken) kukin alkio on yhden 32-bittisen sanan mittainen boolean, byte, char, short, int,… kaksi sanaa vaativa muuttuja (long, double) sijoitetaan kahteen peräkkäiseen sanaan big-endian talletus 03/01/2019 Liisa Marttinen kevät 2005

13 Parametrit, paluuarvon ja välitulokset sisältävä operandipino (LIFO)
SP osoittaa pinon huipulle pinoarkkitehtuuri (vs. rekisteriarkkitehtuuri) kun kehys on luotu, niin operandipino on tyhjä konekielessä on käskyt operandien tallettamiseen pinoon ja niiden käsittelemiseen pinossa 03/01/2019 Liisa Marttinen kevät 2005

14 JVM:n tiedon osoitusmoodit (4)
iINC Välitön operandi Indeksoitu Pino-osoitus Taulukko-osoitus pinon kautta tehollinen muistiosoite (LV) + 2 iINC korvaa pinon kaksi päällä olevaa kokonaislukua niiden summalla iADD Korvaa pinon pinnalla olevat taulukon alkuosoite ja indeksi k.o. taulukon alkiolla iALOAD

15 JVM:n konekäskyt Peruslaskutoimitukset Boolean Pinon hallinta
add, sub, mul, div, rem, neg iadd, ladd, fadd, dadd Boolean and, or, xor, shl, shr, ushr Pinon hallinta dup, pop, swap, tauluk. luonti, esitystavan muutokset 03/01/2019 Liisa Marttinen kevät 2005

16 JVM:n konekäskyt Load/Store Vertailut Kontrollinsiirrot Muut
load, aload, store, astore, push-käskyt Vertailut Kontrollinsiirrot Muut tyyppimuunnokset: i2l, i2f objektien luominen ja manipulointi: new 03/01/2019 Liisa Marttinen kevät 2005

17 Java-tulkki (4) Emuloi JVM-konekielen käskyjä (byte-koodia)
iload i iload j iadd istore k Emuloi JVM-konekielen käskyjä (byte-koodia) Yksi käsky kerrallaan JVM-rekisterit ja muistialueet emuloitu tulkin tietorakenteina Hidasta, mutta joustavaa data Java tulkki Pentium II suoritin (vrt. Titokone) 03/01/2019 Liisa Marttinen kevät 2005

18 Käännös natiivikoneelle
iload i iload j iadd istore k (a) Käännetään tavukoodi natiivikoneen konekielelle, ja suoritetaan normaalin ohjelman tapaan (b)Käännetään tavukoodi korkean tason kielelle, joka sitten käännetään natiivikoneen konekielelle alkuosa riittää tehdä kerran loppuosa on jo valmiina yleensä ongelma: dynaaminen linkitys data kään-nös dl lataus- moduuli Pentium II suoritin 03/01/2019 Liisa Marttinen kevät 2005

19 Java JIT -käännös iload i iload j iadd istore k data JIT- kään-nös
JIT = Just-in-Time Emulointi ja/tai natiivikoneen suoritus tilanteesta riippuen Kääntää luokan natiivikonekielelle dynaamisesti linkitettäväksi moduuliksi, juuri ennen luokan metodin kutsua Tarvitsee paljon muistia Voi hidastaa suoritusta, jos käännökseen menee enemmän aikaa kuin tulkitsemiseen (käännös vasta 2. kutsukerralla?) JVM-rekisterit ja muistialueet emuloitu tulkin tietorakenteina, joita natiivikoodi myös käyttää data JIT- kään-nös Java- tulkki dl-lataus- moduuli Pentium II -suoritin 03/01/2019 Liisa Marttinen kevät 2005


Lataa ppt "Luku 12 Java-ohjelmien suoritus"

Samankaltaiset esitykset


Iklan oleh Google