Ähnliche Dokumente
Praktikum Compilerbau Sitzung 9 Java Bytecode

Compilerbau. Martin Plümicke WS 2018/19

Informatik II Übung 5. Pascal Schärli

Java Bytecode Eike Robert Freie Universität Berlin. Softwareprojekt Übersetzerbau, 2013

Informatik II Übung 4. Pascal Schärli

Java-Bytecode: Der Blick unter die Haube

Java Virtual Machine (JVM) Übersicht

Java Virtual Machine

Rekursion. L. Piepmeyer: Funktionale Programmierung - Rekursion

Informatik II - Tutorium 5

Beuth Hochschule Die virtuelle Java Maschine (JVM) WS13/14

Informatik II Übung 5 Gruppe 4

Java-Prozessoren. Die Java Virtual Machine spezifiziert... Java Instruktions-Satz. Datentypen. Operanden-Stack. Konstanten-Pool.

Overview of Stuttgart s Suburbs

Inhaltsverzeichnis 1

Statische Analyse. Holger Hans Peter Freyther 1. Seminar zu Ursachen und Vermeidung von Fehlern in der Softwareentwicklung, 2006

Informatik II (D-ITET) Übungsstunde 5,

Abstrakte Datentypen.

Interpreter für Zwischencode und abstrakte Interpretation

Informatik II - Übung 04. Christian Beckel Besprechung Übungsblatt 3

Kapitel 1. Bytecode, JVM, Dynamische Compilierung. Am Beispiel des IBM Jalapeno-Compilers (besser als SUN!) 1

Übung zur Vorlesung Einführung in Software Engineering

Objektorientierte. Programmierung und Modellierung. Einführung. Ralf Lämmel.

Virtual Machines unter der Haube

Exception Handling in Java

JAVA als erste Programmiersprache Semesterkurs

Von Geysiren und Kaffeebohnen

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Personalbuslinie CCS Fahrtrichtung Geb Haltestelle Terminal 1 Ost Abfahrtzeiten

Die Erzeugung von Testfällen mit einer symbolischen virtuellen Maschine und Constraint Solvern

Zwischencode-Erzeugung. 2. Juni 2009

Java Thread Synchronisierung

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Theorie zu Übung 8 Implementierung in Java

Java und Dalvik Bytecode - Ein Vergleich

Funktionale Programmierung


im Rahmen des Seminars - Programmiersprachen Markus Nestvogel

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Java Bytecode. Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19. Register und Stack. Klassenhierarchie und Typen

Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19

Java Einführung Abstrakte Klassen und Interfaces

Polymorphie. 15. Java Objektorientierung II

Vererbung und Polymorphie

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Polymorphie. 15. Java Objektorientierung II

Vergleich unterschiedlicher virtueller Maschinen

Vorgartenstraße. Praterstern 5,5B,80A,82A,O,U2. Donauinsel 11A,11B. Montag-Freitag (Schule) Montag-Freitag (Ferien) Samstag Sonn- und Feiertage

25 Floridsdorf U Oberdorfstraße

Programmieren 1 09 Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Programmierung Nachklausurtutorium

Chapter 1 : þÿ b w i n O n l i n e - W e t t e n c h a p t e r

Universität Karlsruhe (TH)

Einstieg in die Informatik mit Java

J.5 Die Java Virtual Machine

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Objektorientierte Programmierung

Java Generics. Ein kleines Tutorium zur Verwendung von Generics. Prof. Dr. Nikolaus Wulff

3AA. Prozeduren und Rekursion Prof. Dr. Wolfgang P. Kowalk Universität Oldenburg WS 2005/2006

Singer Singer Seriennummern - Produktionsdatum (c) 2019 Nähzentrum Braunschweig :00

1. Welche Programmzeilen definieren die main-methode richtig?

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

3. Konzepte der objektorientierten Programmierung

Abschlußtest Programmieren 30. Juni 2017 Name: Punkte von 32: Gruppe: Haase-Di Haase-Do Stanek-Di Stanek-Do

Einstieg in die Informatik mit Java

Prinzipien Objektorientierter Programmierung

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Chapter 1 : þÿ b w i n a p p i n s t a l l i e r e n c h a p t e r

Übersetzer I. Vorlesung WS 1999/2000 Uwe Kastens

Programmierkurs C++ Abstrakte Klassen und Methoden

U1 Reumannplatz Leopoldau

Vererbung Advanced. Ziele. Überschreiben von Methoden der Eltern Einführung Interface & Abstrakte Klasse Sichtbarkeit von Methoden bei Vererbung

Exceptions - Klausuraufgaben

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Info2 Übungsstunde 5. Agenda. Lösungen U4. Java... more insights. Tipps zur Übung 5

Kapitel 12: Übersetzung objektorienter Konzepte

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus

Irren ist menschlich. Nur wer uns lobt, ist unfehlbar. (Oliver Hassencamp)

Beispielprüfung CuP WS 2015/2016

Tutorium 5 - Programmieren

Informatik II Übung 04

Die Halde. Verwendung in der Speicherbelegung Visualisierung der Halde Call by Value & Call by Reference

Softwaretechnik 1 Übung 2

Wiederholung. Klassenhierarchie:

Effiziente Java Programmierung

C++ Parent-Shared-Ptr. Detlef Wilkening

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

E i n f ü h r u n g i n d i e D a t e n b a n k s p r a c h e SQL

Client-Server-Beziehungen

Mapra: C++ Teil 6. Felix Gruber, Michael Rom. 07. Juni 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 6 07.

Informatik II Übung, Woche 14

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Freudenauer Hafenstraße. Grünhaufenbrücke. Holen Sie sich die aktuellen Abfahrtszeiten auf Ihr Handy! <weißer Text> m.qando.

Kapitel 6. Vererbung

Objektorientierte. Programmierung und Modellierung. Einführung. Ralf Lämmel AG Softwaresprachen

Kapitel 6. Vererbung

Transkript:

CACAO-EineezienteJavaVM Implementierung InstitutfurComputersprachen TechnischeUniversitatWien Argentinierstrae8 AndreasKrall ZusammenfassungCACAOisteineezienteImplementierungeiner http://www.complang.tuwien.ac.at/andi/ A-1040Wien JavaVM,dieaufJust-In-TimeUbersetzungberuht.CACAOubersetzt wahrendderlaufzeitdieaufgerufenenmethodenaufmaschinencodefur ZwischencodeindenregisterbasiertenMaschinencodevonRISC-Prozessorenum.DabeiwerdenBefehlekombiniert,Kopierbefehleentfernt unddenvariablenmaschinenregisterzugewiesen.beiderentwicklung Speicherverbrauchgeachtet.CACAOistzurZeitdieschnellsteJavaVM ZyklenfurdieUbersetzungeinesZwischencodebefehls. denalphaprozessor.derubersetzerformtdabeidenstackbasierten desubersetzerswurdeaufextremkurzeubersetzungszeitundgeringen ImplementierungfurdenAlpha-Prozessorundbenotigtwenigerals1000 auchfuranderezielarchitekturenzuubersetzen. Moglichkeitengeschaen,denerzeugtenMaschinencodeabzuspeichern, undnichtnurjust-in-time,sonderndasganzeprogrammaufeinmal, PowerPC-undSparc-Prozessorerweitert.Gleichzeitigdazuwerdendie ZurZeitwirdCACAOumMaschinencodegeneratorenfurdenMIPS-, 1Einleitung Java's[AG96]ErfolgalsProgrammiersprachekommtvonseinerRollealsInter- einembrowserausgefuhrtwerden,istaberbeigroenprogrammenoderzeitkritischenanwendungeninakzeptabel.zweilosungenfurdiesesproblembieten DieStandardimplementierungderJavaVMalsInterpretermachtdieAusfuhrung unabhangigedarstellungvonprogrammenimzwischencodederjavavm[ly96]. vonprogrammenlangsam.dasspieltkeinerolle,wennkleineanwendungenin net-programmiersprache.diegrundlagefurdiesenerfolgistdiemaschinen- sichan: alsauchubersetzer.mitcacaohabenwirunsfurubersetzerentschieden,da {spezialisiertejava-prozessoren dieseransatzportableristundmehrmoglichkeitenfuroptimierungenbietet {UbersetzungdesZwischencodesaufMaschinencode SUNhatbeideWegeeingeschlagenundentwickeltsowohlJava-Prozessoren

deraufgerufenenmethodenwahrendderlaufzeit(just-in-timeubersetzer). werden:ubersetzungdesgesamtenprogrammsaufeinmaloderubersetzung [KEG98].DieUbersetzungaufMaschinencodekannaufzweiArtendurchgefuhrt CACAOunterstutztbeideMethoden.CACAOundseineImplementierungsind inmehrerenartikelnbeschrieben[kg97][kp98]undistuberdasinternetfrei erhaltlich. 2VerwandteArbeiten miersprachenaufunterschiedlichearchitekturenzulosen. salcomputerorientedlanguage)wurdefureineverwendunginubersetzern DieIdeemaschinenunabhangigerZwischendarstellungenistschonsehraltund vorgeschlagen,umdasproblemderubersetzungvielerverschiedenerprogram- gehtbisindasjahr1960zuruck[ste61].diezwischenspracheuncol(universchinevonpascal[pd82],beeinut.p-codeerlangtegroenbekanntheitsgrad durchseineverwendungimucsd-pascal-system.genausowiebeiderjavavm dieseprozessorenabernichterfolgreich. gabesmikroprozessoren,diep-codedirektausfuhrenkonnten.ammarktwaren DasDesignderJavaVMwurdesehrstarkvonP-Code,dervirtuellenMadarstellungdesGardensPointUbersetzersberuhtauchaufeinerStackmaschine, diedcodegenanntwurde[gou97].dcodewurdestarkvonp-codebeeinut. siertezwischendarstellung.diesedarstellungwurdeentworfen,umtrotzkurzer UbersetzungszeitenschnellenMaschinencodeerzeugenzukonnen.DieZwischen- DasAmsterdam-Compiler-Kit[TvSKS83][TKLJ89]verwendeteinestackba- FurDcodewurdensowohlInterpreteralsauchUbersetzerfurverschiedeneArchitekturenentwickelt. auftreten,sindauchvonderprogrammierspracheforthbekannt.inseinerdoktorarbeit[ert96]undin[ep97]beschreibtantonertlrafts,einforthsystem, dasmaschinencodewahrendderlaufzeiterzeugt.dieubersetzunginmaschi- DieProbleme,diebeiderUbersetzungvonStackcodenachMaschinencode nencodeerfolgtubereinenzwischenschritt,inwelchemdiestackbefehlewieder inarithmetischeausdruckezuruckubersetztwerden,dieineinemazyklischen gerichtetengraphendargestelltwerden.in[em95]ubersetztertldieprogrammierspracheforthunterverwendungvoncaufmaschinencode.dabeiwerden StackzellendurchlokaleVariableneinerC-Funktiondargestellt.Optimierung lungsumgebungvonsymantec.sunbrachteauchjitubersetzerfursparc- undpowerpc-prozessorenheraus,sgifurmips-prozessorenundvorkurzem DieerstenJITUbersetzerkamenvorzweiJahrenvonSUNundfurdie BrowservonNetscapeundMicrosoftheraus.DarauffolgtebalddieEntwick- undmaschinencodeerzeugungwerdendannvomc-ubersetzerdurchgefuhrt. DigitalfurdenAlpha-Prozessor.KaeisteinfreiverfugbarerJITUbersetzer dervontimwilkinsonentwickeltwurde(http://www.kaffe.org/).furalle dieseerwahntensystemegibteskeinebeschreibungderverwendetenubersetzungstechniken. 2

denstackdurchregister.caeineistkeinjitubersetzer,esubersetzteinkomplettesprogrammimvorhinein.daisy(dynamicallyarchitectedinstruction Kollegenbeschrieben[HGH96].EswerdendabeizweiUbersetzungmethodenverwendet.DieeinfacheMethodeemuliertdenStack,diebessereMethodeersetzt DasUbersetzungsschemavonCaeinewirdimArtikelvonHsiehundseinen dezuermoglichen.diekompatibiliatmitaltenarchitekturenwirddabeidurch SetfromYorktown)isteineVLIWArchitekturdiebeiIBMentwickeltwurde, JITUbersetzungermoglicht.DerUbersetzerfurdieJavaVMistin[EAH97] umeineezienteausfuhrungvonpowerpc,s/390undjavavmmaschinenco- beschrieben. thodedermaschinencodeerzeugungfureinenjitubersetzer.dieserubersetzer machtoptimierungenwieeliminationvonbereichsuberprufungen,auswertung vongemeinsamenteilausdruckenundzweiverschiedeneartenvonregisterzuteilung,eineeinfacheundeineglobaleaufprioritatenbasierte.dieergebnisse Adl-TabatabaiundseineKollegen[ATCL+98]beschreibeneineezienteMe- zeigen,dafurvielebenchmarkprogrammediekomplexeregisterzuteilungmehr 3UbersetzungszeitverbrauchtalsdurchkurzereLaufzeitwiedereingebrachtwird. DieJavaVMisteinegetypteStackmaschine[LY96]mitunterschiedlichenBefehlenfurganzeZahlen,FliekommazahlenundZeiger.DerBefehlsatzbesteht Ubersetzungsgrundlagen ausarithmetisch/logischenbefehlen,vergleichs-undsprungbefehlen,befehlen furvariablen-undspeicherzugri,methodenaufruf,typuberprufungundsyn- chronisation.dasfolgendebeispielzeigtdiezwischendarstellungfurdiejava- Zuweisunga=b-c*d. iloadb iloadc iloadd imul isub ;pushcontentsofvariablec ;pushcontentsofvariableb ;pushcontentsofvariabled ;computec*d StackarchitekturderJavaVM.RISC-ProzessorenhabeneinengroenRegistersatz(derAlpha-Prozessorbesitzt32Ganzzahl-und32Fliekommazahlregister, zwischenspeicherundregister.dielokalenvariableneinermethodebenden sichnormalerweiseinregisternundwerdennurindenspeicherausgelagert, wennzuwenigregistervorhandensindoderaufrufvorschriftenesverlangen. welchealle64bitbreitsind).arithmetisch/logischebefehlewerdennuraufdatenausgefuhrt,diesichinregisternbenden.speicherbefehlebewegendiedaten istorea;popstacktopintovariablea DieArchitekturvonRISC-Prozessorenunterscheidetsichwesentlichvonder ;computeb-(c*d) werden(dievariablena,b,cunddbendensichinregistern): mierendenubersetzerindiefolgendenzweialpha-maschinenbefehleubersetzt DievorhergehendeJavazuweisunga=b-c*dwurdevoneinemopti- 3

StackvollstandigeliminiertunddieeinzelnenStackzellenwerdendurchtemporareVariablenersetzt,diesichnormalerweiseinRegisternbenden.Einenaivgen:MOVEb,t0 UbersetzungdesvorhergehendenBeispielswurdefolgendeAlpha-Befehleerzeu- WennJavaVMZwischencodeaufMaschinencodeubersetztwird,wirdder SUBLb,tmp0,a MULLc,d,tmp0 ;a=b-tmp0 ;tmp0=c*d MULLt1,t2,t1 SUBLt0,t1,t0 MOVEd,t2 MOVEc,t1 ;imul ;isub ;iloadd ;iloadc ;iloadb MethodezumEntfernenoderVermeidenderKopierbefehlenotig.Weitersmu einschnelleralgorithmsfurdieregisterzuteilungangewendetwerden. UmJavaVM-BefehleaufMaschinencodeabzubilden,istdahereineeziente MOVEt0,a ;istorea Befehleaufgebaut,dieeinfacherzuDekodierenist.ImzweitenDurchgangwird 4DerCACAOUbersetzer derstackanalysiert,wobeieinedatenstrukturerzeugtwird,dieeinerstatischen Stackdarstellungentspricht.GleichzeitigwerdendabeiBefehlekombiniert,VariablenabhangigkeitenuberpruftundderRegisterbedarfbestimmt.ImletzteporarenRegisterzugeteilt. 4.1Grundblockschnittstellendenition DurchgangwerdengleichzeitigmitderMaschinencodeerzeugungauchdietem- DieUbersetzungerfolgtindreiDurchgangen.ImerstenDurchgangwerden diegrundblockebestimmtundeswirdeinezwischendarstellungderjavavmwirddabeidertypdesregistersbestimmtundobderinhaltdesregistersubeblockgrenzewirdeinemxenregisterzugewiesen.wahrendderstackanalysdertaufwendigeverfahren.wirhabendahereinexeschnittstellendenition andengrenzenvongrundblockenfestgesetzt.jedestackzelleaneinergrund- EineoptimaleRegisterzuteilungbeiderVereinigungvonKontrollussenerforwirkungendieserxenRegisterschnittstellezuuntersuchen,habenwireineAnalyseaneinergroenJava-Anwendung,demjavacUbersetzerundallenseinen Bibliotheksmethoden,durchgefuhrt.Tabelle1zeigt,dainmehrals93%aller erhohen,unterbrechenmethodenaufrufenichteinengrundblock.umdieaus- Methodenaufrufeerhaltenbleibenmu.UmdieGroevonGrundblockenzu diequalitatdeserzeugtenmaschinencodeshat. Damitwirdklar,dadiesexeRegisterzuteilungkeinennegativenEinuauf FallederStackanGrundblockgrenzenleeristunddiemaximaleStacktiefe6ist. 4

Tabelle1.VerteilungderStacktiefeanGrundblockgrenzen Schnittstellen793025813611236830 0 123456>6 4.2EntfernenvonKopierbefehlen wahrendderabarbeitungdesprogrammesauftretenwurde. UmunnotigeKopierbefehlezuentfernen,wirddasLadenvonDatensolange verzogert,bisdieinstruktionerreichtwird,diediesedatenbenotigt.abbildung derlaufzeitstacksonderneinestatischedarstellungdesstackzustandes,wieer 1zeigtdieBefehls-undStackdarstellungdesUbersetzers.DieserStackistnicht b?c?d imul c*d? EinBefehlhatZugriaufdenStackvorundnachderAusfuhrungdesBefehls.DerStackwirddabeidurcheinelineareListedargestellt.DiebeidenStacks Abbildung1.Befehls-undStackdarstellung sondernauchinformationendarubervonwelcherlokalenvariablendiesezelle werden.diesedarstellungkannnuneinfachfurdievermeidungvonkopierbefehlenverwendetwerden.jedestackzelleenthaltnichtnurdentypdieserzelle, konnendabeialsdiequelloperandenundderzieloperanddesbefehlsgesehen Variable. DerBefehl,derdieseZellealsQuelloperandbenotigt,verwendetdirektdielokale einekopieist.kopierbefehlevonvariablenanstackzellenwerdennichterzeugt. lokalevariableaufeinestackzelle(register)kopiertwerdenunddiesekopie spatereverwendungdieservariablenungultig.umdaszuvermeidenmudie istoreaschreibteinenneuenwertindievariableaundmachtdamiteine spielvonabb.2enthaltderstackeinkopiederlokalenvariablena.derbefehl ProblememitdieserMethodekonnenbeistore-Befehlenauftreten.ImBei- verwendetwerden. DaderStackalslineareListedargestelltist,mubeistore-Befehlendie- 5

iloada? dup iconst1iaddistorea a? a? 1??+ Abbildung2.Abhangigkeiten selistenachkopienvonlokalenvariablendurchsuchtwerden.tabelle2gibt dieverteilungderstacktiefebeistore-befehlenan.diestacktiefeisthierfast immer0. Tabelle2.VerteilungderStacktiefebeistore-Befehlen stackdepth0123>3 occurrences216731130 nenvonstore-befehlenanbefehlezuruckzubringen,dieeinergebnisberechnen undesineinerstackzelleablegenwurden.dabeigibtesahnlicheproblememit Abhangigkeitenzulosen. DiesestatischeStackdarstellungwirdauchdazuverwendet,umInformatio- 4.3Registerzuteilung nummerzu,wennsichdielebensbereichedieservariablennichtuberlappen. DerjavacUbersetzerteiltverschiedenenlokalenVariablendieselbeVariablen- StackzellenhabenihrenLebensbereichimplizitdurchihreStackpositiongekennzeichnet.WahrendderStackanalysewerdenStackzellengekennzeichnet,deren InhaltubereinenMethodenaufrufhinwegerhaltenbleibenmussen.DiesenStack- DaherwerdenArgumentregisterunddasRuckgaberegistervonMethodenahnzellenundlokalenVariablenwerdendanngesicherteRegisterzugeteiltlichbehandeltwiestore-Befehle. EinschnellerMethodenaufrufistfurdieGeschwindigkeitvonJavawichtig. AufwendigeRegisterzuteilungsalgorithmensindwederangebrachtnochnotig. 6

4.4KombinationvonBefehlen ZusammenmitderStackanalysewerdenBefehle,dieKonstantenladen,mitauslenBefehlewieiadd,isub,imul,idiv,logischeundVerschiebebefehleunpruft,obderWertderKonstantenimgultigenBereichfurMaschinenbefehleliegt Vergleichs-undSprungbefehle.WahrendderMaschinencodeerzeugungwirdubergewahltenBefehlenkombiniert,diedirektdarauffolgen.IndieseKlassefal- 4.5Beispiel undentsprechendermaschinencodeerzeugt. sterzuteilungvonlokalenvariablenan.derjava-ubersetzerverwendetdieselbe VariablennummerfurunterschiedlichelokaleVariablen,wennsichdieGultigkeitsbereichenichtuberlappen.IndiesemBeispielwirddieVariablennummer DasBeispielinAbbildung3zeigtdieZwischendarstellungdesUbersetzerswie siefurfehlersucheverwendetwird.localtablegibtdietypenunddieregi- 3sogarfurVariablenunterschiedlichenTypsgenutzt(ganzeZahlundAdresse).DerJIT-UbersetzerhatdasgesicherteRegistermitderNummer12dieser Variablenzugeteilt. wendigereralgorithmuszumentfernenderkopierbefehleeinargumentregister faceregisterbenotigt.ambeginndesgrundblockswirddasinterfaceregisterin dasargumentregistera00kopiert.diesisteinerderseltenenfalle,woeinauf- furdasinterfaceverwendenhattekonnen. FurdenGrundblockmitdemNamenL004wirdindiesemBeispieleinInter- hatbereitsdielokalevariablel02alsziel,eineinformationdievomnachfolgendenbefehlistorekommt.inahnlicherweisehatderbefehlinvokestatic freiezellemiteinemleerbefehluberschriebenwerden.derbefehliaddconst miteinemrechenbefehl.dadiebefehleineinemfeldgespeichertsind,mudie BeidenBefehlen2und3erkenntmandieKombinationeinerKonstanten mitdernummer31alleseineoperandenalsargumentregistermarkiert.indiesembeispielwerdenallekopierbefehle(mitausnahmedesinterfaceregisters) entfernt. 4.6Just-In-TimeUbersetzer ZuBeginnwerdenalleZeigerinderMethodentabellemitZeigernaufdenUber- Modus,indemderUbersetzerMaschinencodefuralleMethodenerzeugtund setzerinitialisiert.wirddannderubersetzeraufgerufen,wirddererzeugtema- schinencodeindenspeichergeschriebenunddanachdieneuerzeugtemethode aufgerufen. gen.gegenwartigarbeitenwirdaran,diemaschinencodegeneratorenfurmips-, istauchgeeignet,ummaschinencodefureineanderezielarchitekturzuerzeu- dieseaufeinedateiausgibt,ohnediemethodenaufzurufen.diesermodus UmdieFehlersucheimCACAO-Ubersetzerzuerleichtern,gibteseinen gebettetesystemezuverbessern. PowerPC-undSparc-ProzessorenzuentwickelnunddieUnterstutzungfurein- 7

DieDarstellungvonObjektenundKlassenwurdesoentworfen,daeinschneller ZugriaufObjekteundMethodenbeigeringemSpeicherverbrauchmoglichist. 4.7DarstellungvonObjekten Klasse.FurdieKlassendarstellunggibteszweiVarianten.Inderkompakteren VarianteenthalteineKlassedieZeigertabelledervirtuellenFunktionenundmit InCACAOenthaltenObjektedieInstanzvariablenundeinenZeigeraufdie negativemosetdieinterfacetabelle(abbildung4).furjedesimplementierte InterfaceexistierteinZeigeraufdievirtuelleFunktionstabellederInterfaces. den,dieininterfacesverwendetwerden,mitnegativemosetzumklassenzeiger gespeichert(abbildung5).durchdieunterscheidungininterfacemethodenund virtuellemethodenbleibtdienormalezeigertabelleunverandertundauchdie Interfacemethodentabellewirdkleiner.TrotzdemistderSpeicherverbrauchfur InderschnellerenVariantewerdenInterfacemethoden,dassindalleMetho- starkreduziertwerden.werdenklassendynamischgeladen,dannhatdiesemethodeallerdingsdennachteil,dasichdieosetsunterumstandenandern dieinterfacemethodentabellequadratisch(anzahlderklassenmitinterfaces* AnzahlderInterfacemethoden).MittelsselectorcoloringkanndieAnzahlderunterschiedlichenOsetsfurInterfacemethodenunddamitderSpeicherverbrauch konnenunddaheranderungenimbereitserzeugtenmaschinencodenotwendig PortierungvonSun'sJDKInterpreter,demJIT-UbersetzerkaeunddemJIT- 5Ergebnisse UmdieGeschwindigkeitvonCACAOzutesten,habenwirCACAOmiteiner langsameralsbeisun'sinterpreter. mitdersynchronisation(sieheauch[kp98]),dahersindhierdiezeitendreimal UbersetzervonDigitalverglichen(sieheTabelle3.DigitalsSystemhatProbleme prufungendurchfuhrt,istdieservergleichfair. CACAOschaltetdieBereichsuberprufungaus.DaCauchkeineBereichsuber- Tabelle4vergleichtCACAOmiteinemCUbersetzer.DieOption-cbvon 6Zusamenfassung WirhabenCACAOundseinenUbersetzerbeschrieben.CACAOistdiezurZeit schnellstejavavm-implementierungfurdenalpha-prozessor.cacaowirdum CodegeneratorenfurandereProzessorenerweitertundhatUnterstutzungfur 7Danksagung http://www.complang.tuwien.ac.at/java/cacao/. eingebettetesysteme.cacaokannviawwwbezogenwerden: IchdankeReinhardGraundMarkProbstfurKorrekturendiesesArtikels. 8

runtimeon21064a300mhz(inseconds) JDKJavaLexjavacespressoTobajavacup DigitalInterpr. kae 29.818.5 98.956.4 9.917.8 12.5 17.9 8.732.1 2.98 3.5 numberofcompiledjavavminstructions DigitalJIT CACAO 84.447.6 2.082.92 14.1 1.883.85 0.50 9.2 1341234759272811443017489 9.8 speedupwithrespecttointerpreter speedupjdk/dec-jit speedupjdk/kae 3.011.04 0.350.38 0.48 0.7-1.17 Tabelle3.VergleichvonJDK,kae,DigitalsJITundCACAO speedupjdk/cacao 12.794.87 3.857.77 0.36 4.02 [ATCL+98]Ali-RezaAdl-Tabatabai,MichalCiernak,Guei-YuanLueh,VisheshM. References [AG96] Parikh,andJamesM.Stichnoth.Fast,eectivecodegenerationinajustin-timeJavacompiler.InConferenceonProgrammingLanguageDesign KenArnoldandJamesGosling.TheJavaProgrammingLanguage. Addison-Wesley,1996. [EAH97]KemalEbcioglu,ErikAltman,andErdemHokenek.AJavaILPmachinebasedonfastdynamiccompilation.InMASCOTS'97-International EuroForth'95,1995. andimplementation,volume33(6)ofsigplan,pagetoappear,montreal, [EM95] 1998.ACM. [EP97] WorkshoponSecurityandEciencyAspectsofJava,1997. M.AntonErtlandMartinMaierhofer.TranslatingForthtonativeC.In [Gou97] [Ert96] chines.phdthesis,technischeuniversitatwien,april1996. K.JohnGough.Multi-language,multi-targetcompilerdevelopment:EvolutionoftheGardensPointcompilerproject.InHanspeterMossenbock, M.AntonErtl.ImplementationofStack-BasedLanguagesonRegisterMa- compiler.ineuroforth'97conferenceproceedings,pages107{116,1997. M.AntonErtlandChristianPirker.ThestructureofaForthnativecode [HGH96]Cheng-HsuehA.Hsieh,JohnC.Gyllenhaal,andWen-meiW.Hwu.Java bytecodetonativecodetranslation:thecaeineprototypeandpreliminaryresults.in29thannualieee/acminternationalsymposiumon editor,jmlc'97{jointmodularlanguagesconference,linz,1997.lncs 1204. [KEG98]AndreasKrall,AntonErtl,andMichaelGschwind.JavaVMimplementations:Compilersversushardware.InJohnMorris,editor,Australian Microarchitecture(MICRO'29),1996. 9

runtimeon21064a300mhz(inseconds) Digitalinterpr.70.3 JDK83.2138.76 sieveadditionlinpack DigitalJIT6.27 kae9.14 124.4 12.2 0.34 1.6 GCC-O32.0 5.33 1.40 2.0 0.9 relationofruntime CACAO-cbruntimeonly3.31 CACAOtotal4.57 1.69 1.42 0.81 0.13- speedupjdk/cacao-cb24.1 speedupjdk/dec-jit13.3 speedupjdk/cacao18.2 speedupjdk/kae9.10 11.8 29.2 82.1 4.7 speedupjdk/gcc41.6 85.7 99.1 1.7 2.0 4.8 Tabelle4.VergleichvonJDK,kae,DigitalsJITundCACAO CACAO-cbnfrun/GCC1.66 1.01 - [KG97] ComputerScienceCommunications,pages101{110,Perth,1998.Springer. ComputerArchitectureConference(ACAC'98),volume20(4)ofAustralian [KP98] mentjavaeciently.insiamakhassanzadehandklausschauser,editors, timecompiler.concurrency:practiceandexperience,9(11):1017{1030, 1997. AndreasKrallandMarkProbst.Monitorsandexceptions:Howtoimple- AndreasKrallandReinhardGra.CACAO{a64bitJavaVMjust-in- [LY96] [PD82] 15{24,PaloAlto,March1998.ACM. TimLindholmandFrankYellin.TheJavaVirtualMachineSpecication. Addison-Wesley,1996. StevenPembertonandMartinC.Daniels.PascalImplementation,TheP4 ACM1998WorkshoponJavaforHigh-PerformanceComputing,pages [Ste61] [TKLJ89]A.S.Tanenbaum,M.F.Kaashoek,K.G.Langendoen,andC.J.H.Jacobs.Thedesignofveryfastportablecompilers.ACMSIGPLANNotices, 24(11):125{131,November1989. Compiler.EllisHorwood,1982. T.B.Steel.ArstversionofUNCOL.InProceedingsoftheWestern [TvSKS83]AndrewS.Tanenbaum,HansvanStaveren,E.G.Keizer,andJohanW. JointIRE-AIEE-ACMComputerConference,pages371{377,1961. cationsoftheacm,16(9):654{660,september1983. Stevenson.Apracticaltoolkitformakingportablecompilers.Communi- ThisarticlewasprocessedusingtheLATEXmacropackagewithLLNCSstyle 10

java.io.bytearrayoutputstream.write(int)void LocalTable: 1: 2: 3: 0: (int)s14 (int)s13 (int)s12(adr)s12 (adr)s15 InterfaceTable: L00] 0: (int)t24 T23] 0ALOAD 1GETFIELD 2IADDCONST 3NOP 4ISTORE 16 5ILOAD 1 L00L02] 6ALOAD T23L02] 7GETFIELD 8ARRAYLENGTH 9IF_ICMPLE 208 ]L002:... 18IF_ICMPLT L003 L005 A00]L004: I00] ]L003: 21ILOAD 20GOTO 19ILOAD 2L004 L03] ] 22BUILTIN1 23ASTORE newarray_byte A02A01A00] A01A00] A00] L00] 27ALOAD 26ICONST 25GETFIELD 24ALOAD 8 [L00A03A02A01A00] [A04A03A02A01A00] 28ICONST 29ALOAD 30GETFIELD L03L00] L00] 33ALOAD 31INVOKESTATICjava.lang.System.arraycopy 32ALOAD 16 ]L005:... 34PUTFIELD 380 [ Abbildung3.Beispiel:Befehls-undStackdarstellung ] 45RETURN 11

objectpointerobject class -instancedata classpointer -interfacepointer methodpointer classinfo methodpointer interfaces - - Abbildung4.kompakteObjekt-undKlassendarstellung methodcode objectpointerobject class -instancedata classpointer - ifmethodpointer methodpointer classinfo -methodcode Abbildung5.schnelleObjekt-undKlassendarstellung methodcode 12