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