Google s JavaScript Engine: V8

Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239) ¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften ¨ Naturw...
Author: Jesko Bieber
1 downloads 0 Views 473KB Size
Allgemein

V8 intern

Google’s JavaScript Engine: V8

Thomas Hutter (1120239) ¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften ¨ Naturwissenschaftliche Fakultat

24. Februar 2014 1 von 17

Allgemein

I NHALT Allgemein Was ist JavaScript? Eigenschaften Was ist ein JavaScript Engine? V8 intern Hidden classes Garbage Collector Compiler

2 von 17

V8 intern

Allgemein

V8 intern

WAS IST J AVA S CRIPT ?



Web Browser



Client-seitig



Dynamische Gestaltung von Webseiten



JavaScript 6= Java

3 von 17

Allgemein

V8 intern

E IGENSCHAFTEN

 

JavaScript ist extrem dynamisch Beispiel Objekte  

4 von 17

¨ Attribute konnen zur Laufzeit hinzgefugt ¨ oder entfernt werden Sind Hash Maps

Allgemein

V8 intern

WAS IST EINE J AVA S CRIPT E NGINE ? Chrome 



¨ Browser wie eigenstandiges Betriebssystem Chrome  



Jeder Tab ist ein eigener Prozess Jeder Prozess verfugt einen ¨ uber ¨

Beispiele:    

V8 (Google Chrome) Spidermonkey (Mozilla Firefox) Chakra (Microsoft IE9) JavaScriptCore (Apple Safari)

5 von 17

Process: Tab1 Thread: Renderer

... Thread: JavaScript

Process: Tab2 Thread: Renderer

... Thread: JavaScript

...

Allgemein

G OOGLE ’ S

6 von 17

V8 intern

Allgemein

V8 intern

H IDDEN CLASSES



Keine Typen zur Compiletime



Ohne Typ Information sind Optimierungen schwer zu realisieren ¨ V8 Losung: Hidden classes



 

7 von 17

Zur Laufzeit erzeugt ¨ Objekte mit derselben hidden class konnen optimiert werden

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

5 6 7

var p1 = new Point ( 1 , 2 ) ; var p2 = new Point ( 3 , 4 ) ;

8 9

p2 . z = 5 ;

8 von 17

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

5 6 7

var p1 = new Point ( 1 , 2 ) ; var p2 = new Point ( 3 , 4 ) ;

8 9

p2 . z = 5 ;

8 von 17

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

5 6 7

var p1 = new Point ( 1 , 2 ) ; var p2 = new Point ( 3 , 4 ) ;

8 9

p2 . z = 5 ;

8 von 17

1

x Point ‘x’

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

5

var p1 = new Point ( 1 , 2 ) ; 7 var p2 = new Point ( 3 , 4 ) ; 6 8 9

p2 . z = 5 ;

8 von 17

x

1

Point

2

‘x’ Point ‘x’ ‘y’

y

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

5

var p1 = new Point ( 1 , 2 ) ; 7 var p2 = new Point ( 3 , 4 ) ; 6 8 9

p2 . z = 5 ;

8 von 17

x

1

Point

2

‘x’ Point ‘x’ ‘y’

y

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

Point

2

‘x’ Point ‘x’

5

‘y’

var p1 = new Point ( 1 , 2 ) ; 7 var p2 = new Point ( 3 , 4 ) ; 6 8 9

3

p2 . z = 5 ;

8 von 17

x

1

y

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

Point

2

‘x’ Point ‘x’

5

‘y’

var p1 = new Point ( 1 , 2 ) ; 7 var p2 = new Point ( 3 , 4 ) ; 6 8 9

3

p2 . z = 5 ;

8 von 17

x

1

4

y

Allgemein

V8 intern

B EISPIEL - HIDDEN CLASSES Point

function Point ( x , y ) { this . x = x ; 3 this . y = y ; 4 } 1 2

Point

2

‘x’

7

‘x’

9

‘y’

var p1 = new Point ( 1 , 2 ) ; var p2 = new Point ( 3 , 4 ) ;

8

p2 . z = 5 ;

8 von 17

y

Point

5 6

x

1

Point 3

‘x’

4

‘y’

5

‘z’

z

Allgemein

V8 intern

G ARBAGE C OLLECTOR

root





Zwischen live Memory und dead Memory unterscheiden

A

B

dead Memory deallozieren C

9 von 17

D

Allgemein

V8 intern

G ARBAGE C OLLECTOR

root





Zwischen live Memory und dead Memory unterscheiden

A

B

dead Memory deallozieren C

9 von 17

D

Allgemein

V8 intern

G ARBAGE C OLLECTOR

root





Zwischen live Memory und dead Memory unterscheiden

A

B

dead Memory deallozieren C

9 von 17

D

Allgemein

V8 intern

M ARK - AND - SWEEP

A B C D

10 von 17

Allgemein

V8 intern

M ARK - AND - SWEEP

A B C D

10 von 17

Allgemein

V8 intern

M ARK - AND - SWEEP

A B C D

10 von 17

Allgemein

V8 intern

M ARK - AND - SWEEP

A B C D 10 von 17

Allgemein

V8 intern

M ARK - AND - SWEEP

A B C D 10 von 17

Allgemein

V8 intern

M ARK - AND - SWEEP

A B D

10 von 17

Allgemein

G ENERATIONAL GARBAGE COLLECTION

 

Kurzlebige Objekte ¨ Haufige Garbage Collection

11 von 17

V8 intern

Allgemein

V8 intern

G ENERATIONAL GARBAGE COLLECTION

 

Kurzlebige Objekte ¨ Haufige Garbage Collection

11 von 17



Langlebige Objekte



Seltene Garbage Collection

Allgemein

V8 intern

G ENERATIONAL GARBAGE COLLECTION

Young generation  

Kurzlebige Objekte ¨ Haufige Garbage Collection

12 von 17



Langlebige Objekte



Seltene Garbage Collection

Allgemein

V8 intern

G ENERATIONAL GARBAGE COLLECTION

Young generation  

Kurzlebige Objekte ¨ Haufige Garbage Collection

13 von 17

Old generation 

Langlebige Objekte



Seltene Garbage Collection

Allgemein

V8 intern

C OMPILER



V8 verfugt 2 Compiler ¨ uber ¨  

Full Compiler: erzeugt guten Code Optimizing Compiler: erzeugt wirklich guten Code

14 von 17

Allgemein

V8 intern

F ULL C OMPILER



Erzeugt schnell guten Code



Trifft zur Laufzeit Annahmen bezuglich des Typs ¨ Benutzt Inline Caches (ICs)





Liefert Typ-Informationen zur Laufzeit des Programms

15 von 17

Allgemein

V8 intern

D ER O PTIMIZING C OMPILER

 

V8 compiliert Hot Functions mit dem Optimizing Compiler ¨ Dazu sind Typ-Informationen notig  



ICs liefern diese Informationen Operationen werden spekulativ optimiert

¨ Konstrukte wie zum Beispiel try { } catch { } konnen nicht oder nur schwer optimiert werden.

16 von 17

Allgemein

V8 intern

¨ DIE AUFMERKSAMKEIT ! DANKE , F UR

Fragen?

17 von 17