<<

,QWURGXFWLRQWR-DYD9LUWXDO 0DFKLQH 2XWOLQH ‡ -DYD/DQJXDJH-DYD9LUWXDO0DFKLQH DQG-DYD3ODWIRUP ‡ 2UJDQL]DWLRQRI-DYD9LUWXDO0DFKLQH ‡ *DUEDJH&ROOHFWLRQ ‡ ,QWHUSUHWHUDQG-XVW,Q7LPH &RPSLOHU 7KH%LJ3LFWXUH

$MDYD %MDYD &MDYD -DYD/DQJXDJH 6SHFLILFDWLRQ

-DYD &RPSLOHU

$FODVV %FODVV &FODVV -DYD9LUWXDO 0DFKLQH -DYD9LUWXDO0DFKLQH 6SHFLILFDWLRQ :KDW,VLQWKH-906SHF" ‡ %\WHFRGHV ² WKHLQVWUXFWLRQVHWIRU -DYD9LUWXDO0DFKLQH ‡ &ODVV)LOH)RUPDW ² 7KHSODWIRUP LQGHSHQGHQWUHSUHVHQWDWLRQRI-DYD ELQDU\FRGH ‡ 9HULILFDWLRQ5XOHV ² WKHDOJRULWKPIRU LGHQWLI\LQJSURJUDPVWKDWFDQQRW FRPSURPLVHWKHLQWHJULW\RIWKH-90 %\WHFRGHH[DPSOH

6WDFN 6WDFN 6WDFN 6WDFN

63→ 63→  63→   63→ 

3&→ELSXVK  ELSXVK  ELSXVK  ELSXVK  ELSXVK 3&→ELSXVK ELSXVK ELSXVK LDGG LDGG 3&→LDGG LDGG 3&→ &ODVV)LOH([DPSOH  +HOOR:RUOGMDYD

public class HelloWorld extends Object { private String s; public HelloWorld() { s = ‘Hello World!’; } public void sayHello() { System.out.println(s); } public static void main(String[] args) { HelloWorld hello = new HelloWorld(); hello.sayHello( ); } } &ODVV)LOH([DPSOH  +HOOR:RUOGFODVV class HelloWorld Superclass /lang/Object Constant Pool #0: ‘Hello World’ Fields s descriptor : Ljava/lang/String; modifiers : private Methods descriptor : ()V modifiers : public sayHello descriptor : ()V modifiers : public main descriptor : (Ljava/lan/String[;)V modifiers : public, static Bytecodes for (the constrtuctor) Bytecodes for sayHello Bytecodes for main 9HULILFDWLRQ

‡ ,VLWDVWUXFWXUDOO\YDOLGFODVVILOH" ‡ $UHDOOFRQVWDQWUHIHUHQFHVFRUUHFW" ‡ :LOOHDFKLQVWUXFWLRQDOZD\VILQGD FRUUHFWIRUPHGVWDFNDQGORFDOYDULDEOH DUUD\" ‡ &KHFNRXWH[WHUQDOUHIHUHQFHV ‡ 2WKHUVDIHW\UHTXLUHPHQWV ,PSOHPHQWDWLRQVRI-90

-DYD -DYD -DYD $SSOLFDWLRQ $SSOLFDWLRQ $SSOLFDWLRQ -90 -DYD26 26 -DYD&KLS

+DUGZDUH +DUGZDUH

-906SHFLILFDWLRQGRHVQRWVSHFLI\ KRZD-90LVLPSOHPHQWHG -DYD3ODWIRUPV  ‡ $-DYD3ODWIRUPFRQVLVWVRI-DYD 9LUWXDO0DFKLQHDQGDVHWRI VWDQGDUGFODVVHV ‡ -90 LQDOOSODWIRUPVPXVWVDWLVI\ -906SHFLILFDWLRQ ‡ 6WDQGDUGFODVVHVFDQEHWDLORUHG DFFRUGLQJWKHWKHUHVRXUFH FRQVWUDLQWV ‡ 7KUHHOHYHOVRI-DYDSODWIRUPV -((-6( DQG-0( -DYD3ODWIRUPV 

)URP .90 :KLWH 3DSHU 6XQ 0LFURV\VWHP 2UJDQL]DWLRQRI-90

&ODVV$UHD

&ODVV,QIRUPDWLRQ 1DWLYH +HDS 6WDFN &RQVWDQW3RRO 6WDFN 0HWKRG$UHD

,QWHUQHW 3&)363 FODVV 5HJLVWHUV 1DWLYH &ODVV ,QWHUIDFH /RDGHU ([HFXWLRQ (QJLQH )LOH6\VWHP 1DWLYH FODVV 0HWKRGV ([HFXWLRQ(QJLQH ‡ ([HFXWHV-DYDE\WHFRGHVHLWKHU XVLQJLQWHUSUHWHURU-XVW,Q7LPH FRPSLOHU ‡ 5HJLVWHUV ² 3& 3URJUDP&RXQWHU ² )3)UDPH3RLQWHU ² 632SHUDQG6WDFN7RS3RLQWHU &ODVV/RDGHU  /RDGLQJILQGLQJDQGLPSRUWLQJWKHELQDU\ GDWDIRUDFODVV  /LQNLQJ ‡ 9HULILFDWLRQHQVXULQJWKHFRUUHFWQHVVRIWKH LPSRUWHGW\SH ‡ 3UHSDUDWLRQDOORFDWLQJPHPRU\IRUFODVVYDULDEOHV DQGLQLWLDOL]LQJWKHPHPRU\WRGHIDXOWYDOXHV ‡ 5HVROXWLRQWUDQVIRUPLQJV\PEROLFUHIHUHQFHVIURP WKHW\SHLQWRGLUHFWUHIHUHQFHV  ,QLWLDOL]DWLRQLQYRNLQJ-DYDFRGHWKDW LQLWLDOL]HVFODVVYDULDEOHVWRWKHLUSURSHU VWDUWLQJYDOXHV &ODVV$UHD

‡ &ODVV,QIRUPDWLRQ ² ,QWHUQDOUHSUHVHQWDWLRQRI-DYDFODVVHV ² ,QIRUPDWLRQDERXWWKH VXSHUFODVV DQG LPSOHPHQWHGLQWHUIDFHV ² ,QIRUPDWLRQDERXWWKHILHOGVDQGPHWKRGV ‡ &RQVWDQW3RRO ‡ 0HWKRG$UHD ² &RQWDLQVWKHE\WHFRGHV RIWKHPHWKRGVRI WKHORDGHGFODVVHV 6WDFN ‡ 7KH-DYDVWDFNLVFRPSRVHGRIIUDPHV ² $IUDPHFRQWDLQVWKHVWDWHRIRQH-DYDPHWKRG LQYRFDWLRQ ² /RJLFDOO\DIUDPHKDVWZRSDUWV ORFDOYDULDEOH DUUD\ DQGRSHUDQGVWDFN ‡ -90 KDVQRUHJLVWHUVLWXVHVWKHRSHUDQG VWDFN IRUVWRUDJHRILQWHUPHGLDWHGDWDYDOXHV ² WRNHHSWKH -90 V LQVWUXFWLRQVHWFRPSDFW ² WRIDFLOLWDWHLPSOHPHQWDWLRQRQDUFKLWHFWXUHVZLWK OLPLWHGQXPEHURIJHQHUDOSXUSRVHUHJLVWHUV ‡ (DFK-DYDWKUHDGKDVLWVRZQVWDFNDQGFDQQRW DFFHVVWKHVWDFNRIRWKHUWKUHDGV 6WDFN)UDPH

public class A ,QWHU { 0HGLDWH 2SHUDQG ...... 63→ 'DWD 6WDFN void f(int x) 9DOXHV { int i; L /RFDO for(i=0; i

)UDPH )UDPH )UDPH

)UDPH )UDPH )UDPH

)UDPH )UDPH

6WDFN +HDS

‡ $OO-DYDREMHFWVDUHDOORFDWHGLQWKH KHDS ‡ -DYDDSSOLFDWLRQVFDQQRWH[SOLFLWO\IUHH DQREMHFW ‡ 7KH*DUEDJH&ROOHFWRU LVLQYRNHGIURP WLPHWRWLPHDXWRPDWLFDOO\WRUHFODLP WKHREMHFWVWKDWDUHQRORQJHUQHHGHG E\WKHDSSOLFDWLRQ ‡ 7KHKHDSLVVKDUHGE\DOO-DYDWKUHDGV -DYD2EMHFWVLQWKH+HDS

FOD]] )LHOGV )LHOGV … … FODVV2EMHFW )LHOGVQ FODVV$ FODVV% FOD]] … FOD]]

&ODVV$UHD …

+HDS *DUEDJH&ROOHFWRU 5RRWVLQWHUQDOO\GHILQHGE\WKH -90 LPSOHPHQWDWLRQ /LYH2EMHFWVUHDFKDEOHIURPWKHURRWV *DUEDJH 'HDG2EMHFWV QRWUHDFKDEOHIURPWKH URRWVQRWDFFHVVLEOHWRWKHDSSOLFDWLRQ

URRW

$ B ( )

& ' * 0DUN6ZHHS&RPSDFWLRQ

URRW URRW URRW URRW $ $ % % % % ( & & * ' ' ( ( ( ) ) * * *

%HIRUH *& $IWHU 0DUN $IWHU 6ZHHS $IWHU &RPSDFW

/LYH *DUEDJH 8QNQRZQ )UHH *HQHUDWLRQDO*DUEDJH&ROOHFWLRQ ‡ 0RVWREMHFWVOLYHIRUYHU\VKRWWLPH ‡ $VPDOOSHUFHQWDJHRIWKHPOLYHPXFKORQJHU

)UHH )UHH )UHH

%\WHFRGH

%\WHFRGH

1DWLYH -,7 ,QWHUSUHWHU &RGH &RPSLOHU

&38 &38

,QWHUSUHWDWLRQ -,7&RPSLODWLRQ %\WHFRGH,QWHUSUHWHU 

while(program not end ) { fetch next => b switch(b) { case ILOAD: load an integer from the local variable array and push on top of current operand stack; case ISTORE: pop an integer from the top of current operand stack and store it into the local variable array; case ALOAD: ….. ... } // end of switch } // end of while %\WHFRGHLQWHUSUHWHU 

‡ $GYDQWDJH ² (DVHWRLPSOHPHQW ² 'RHVQRWQHHGH[WUDPHPRU\WRVWRUH FRPSLOHGFRGH ‡ 'LVDGYDQWDJH ² 9HU\6ORZaWLPHVVORZHUWKDQ H[HFXWLRQRIQDWLYHFRGH -XVW,Q7LPH&RPSLOHU

‡ '\QDPLFDOO\FRPSLOHVE\WHFRGHLQWR QDWLYHFRGHDWUXQWLPHXVXDOO\LQ PHWKRGJUDQXODULW\ ‡ ([HFXWLRQRIQDWLYHFRGHLVPXFK IDVWHUWKDQLQWHUSUHWDWLRQRIE\WHFRGH ‡ &RPSLODWLRQLVWLPHFRQVXPLQJDQGPD\ VORZGRZQWKHDSSOLFDWLRQ ‡ 7UDGHRIIVEHWZHHQH[HFXWLRQWLPHDQG FRPSLODWLRQWLPH $GDSWLYH&RPSLOHU

‡ 2EVHUYDWLRQOHVVWKDQRIWKHPHWKRGV DFFRXQWIRUPRUHWKDQRIH[HFXWLRQWLPH ² 0HWKRGVFRQWDLQVORRSZLWKODUJHQXPEHURI LWHUDWLRQ ² 0HWKRGVWKDWDUHIUHTXHQWO\LQYRNHG ‡ ,GHDRQO\FRPSLOHWKHPHWKRGVZKHUHWKH DSSOLFDWLRQVSHQGVDORWRIWLPH ‡ ,GHDSHUIRUPDGYDQFHGFRPSLOHU RSWLPL]DWLRQIRUWKHKRWWHVWPHWKRGVVLPSOH RUQRFRPSLOHURSWLPL]DWLRQIRUOHVVKRW PHWKRGV +RZ$GDSWLYH&RPSLOHU:RUNV ‡ 6HWWKUHHWKUHVKROGV77 7 7 ‡ (DFKPHWKRGKDVDFRXQWHUWKDWLVLQLWLDOL]HG WR:KHQHYHUWKHPHWKRGLVLQYRNHG LQFUHDVHLWVFRXQWHUE\ ‡ 7KHPHWKRGVZLWKFRXQWHUORZHUWKDQ7DUH H[HFXWHGXVLQJLQWHUSUHWHU ‡ :KHQDPHWKRG·VFRXQWHUUHDFKHV7FRPSLOH WKLVPHWKRGZLWKVLPSOHRSWLPL]DWLRQV ‡ :KHQDPHWKRG·VFRXQWHUUHDFKHV7 UHFRPSLOHWKLVPHWKRGZLWKDGYDQFHG RSWLPL]DWLRQV