0% found this document useful (0 votes)
39 views29 pages

,Qwurgxfwlrqwr-Dyd9Luwxdo 0Dfklqh

The document provides an introduction to the Java Virtual Machine (JVM). It outlines the organization of the JVM and discusses bytecode instructions, class files, verification, garbage collection, and interpreters and just-in-time compilers. The JVM specification defines bytecode instructions, class file format, and verification rules. Bytecode is executed by the execution engine using an interpreter or JIT compiler. Memory is organized into the class area, stack, and heap.

Uploaded by

Ana Ilie
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views29 pages

,Qwurgxfwlrqwr-Dyd9Luwxdo 0Dfklqh

The document provides an introduction to the Java Virtual Machine (JVM). It outlines the organization of the JVM and discusses bytecode instructions, class files, verification, garbage collection, and interpreters and just-in-time compilers. The JVM specification defines bytecode instructions, class file format, and verification rules. Bytecode is executed by the execution engine using an interpreter or JIT compiler. Memory is organized into the class area, stack, and heap.

Uploaded by

Ana Ilie
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

,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() {
[Link](s);
}
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
[Link]( );
}
}
&ODVV)LOH([DPSOH  +HOOR:RUOGFODVV
class HelloWorld
Superclass java/lang/Object
Constant Pool
#0: ‘Hello World’
Fields
s descriptor : Ljava/lang/String;
modifiers : private
Methods
<init> descriptor : ()V
modifiers : public
sayHello descriptor : ()V
modifiers : public
main descriptor : (Ljava/lan/String[;)V
modifiers : public, static
Bytecodes
Bytecodes for <init> (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<x; i++) 9DULDEOH
{ [ $UUD\
... ...
&DOOHU·V63
}
... ... &DOOHU·V)3
}
)3→ 5HWXUQ3&
6WDFN² (DFK7KUHDG+DVLWVRZQ6WDFN
+HDS
7KUHDG 7KUHDG 7KUHDG

)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
<RXQJ
*HQHUDWLRQ
<RXQJ
*HQHUDWLRQ 2OG
*HQHUDWLRQ <RXQJ
*HQHUDWLRQ
2OG
2OG *HQHUDWLRQ
*HQHUDWLRQ 2OG
*HQHUDWLRQ
,QWHUSUHWHUYV -XVW,Q7LPH&RPSLOHU

%\WHFRGH

%\WHFRGH
1DWLYH -,7
,QWHUSUHWHU &RGH &RPSLOHU

&38 &38

,QWHUSUHWDWLRQ -,7&RPSLODWLRQ
%\WHFRGH,QWHUSUHWHU 
while(program not end ) {
fetch next bytecode => 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
IDVWHUWKDQLQWHUSUHWDWLRQRI E\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 77
‡ (DFKPHWKRGKDVDFRXQWHUWKDWLVLQLWLDOL]HG
WR:KHQHYHUWKHPHWKRGLVLQYRNHG
LQFUHDVHLWVFRXQWHUE\
‡ 7KHPHWKRGVZLWKFRXQWHUORZHUWKDQ7DUH
H[HFXWHGXVLQJLQWHUSUHWHU
‡ :KHQDPHWKRG·VFRXQWHUUHDFKHV7FRPSLOH
WKLVPHWKRGZLWKVLPSOHRSWLPL]DWLRQV
‡ :KHQDPHWKRG·VFRXQWHUUHDFKHV7
UHFRPSLOHWKLVPHWKRGZLWKDGYDQFHG
RSWLPL]DWLRQV

You might also like