32
Google’s JavaScript Engine: V8 Thomas H ¨ utter (1120239) Mario Preishuber (1120643) Fachbereich Computerwissenschaften Naturwissenschaftliche Fakult¨ at 24. Februar 2014 1 von 17

Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

  • Upload
    others

  • View
    10

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

Google’s JavaScript Engine: V8

Thomas Hutter (1120239)Mario Preishuber (1120643)

Fachbereich ComputerwissenschaftenNaturwissenschaftliche Fakultat

24. Februar 2014

1 von 17

Page 2: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

INHALT

AllgemeinWas ist JavaScript?EigenschaftenWas ist ein JavaScript Engine?

V8 internHidden classesGarbage CollectorCompiler

2 von 17

Page 3: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

WAS IST JAVASCRIPT?

� Web Browser� Client-seitig� Dynamische Gestaltung von Webseiten� JavaScript 6= Java

3 von 17

Page 4: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

EIGENSCHAFTEN

� JavaScript ist extrem dynamisch� Beispiel Objekte

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

4 von 17

Page 5: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

WAS IST EINE JAVASCRIPT ENGINE?

� Browser wie eigenstandigesBetriebssystem

� Chrome� Jeder Tab ist ein eigener Prozess� Jeder Prozess verfugt uber einen

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

Chrome

...

Thread: Renderer

Thread: JavaScript

Process: Tab1

...

Thread: Renderer

Thread: JavaScript

Process: Tab2

...

5 von 17

Page 6: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GOOGLE’S

6 von 17

Page 7: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

HIDDEN CLASSES

� Keine Typen zur Compiletime� Ohne Typ Information sind Optimierungen schwer zu realisieren� V8 Losung: Hidden classes

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

7 von 17

Page 8: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

8 von 17

Page 9: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

8 von 17

Page 10: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

‘x’

Pointx

1

8 von 17

Page 11: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

‘x’

Point

‘y’

‘x’

Point

x

y2

1

8 von 17

Page 12: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

‘x’

Point

‘y’

‘x’

Point

x

y2

1

8 von 17

Page 13: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

‘x’

Point

‘y’

‘x’

Point

x

y

3

2

1

8 von 17

Page 14: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

‘x’

Point

‘y’

‘x’

Point

x

y

4

3

2

1

8 von 17

Page 15: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

BEISPIEL - HIDDEN CLASSES

1 function Point (x ,y ) {2 this .x = x ;3 this .y = y ;4 }56 var p1 = new Point ( 1 , 2 ) ;7 var p2 = new Point ( 3 , 4 ) ;89 p2 .z = 5;

Point

‘x’

Point

‘y’

‘x’

Point

‘y’

‘x’

Point

‘z’

x

y

z

5

4

3

2

1

8 von 17

Page 16: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GARBAGE COLLECTOR

� Zwischen live Memory und deadMemory unterscheiden

� dead Memory deallozieren

DC

BA

root

9 von 17

Page 17: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GARBAGE COLLECTOR

� Zwischen live Memory und deadMemory unterscheiden

� dead Memory deallozieren

DC

BA

root

9 von 17

Page 18: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GARBAGE COLLECTOR

� Zwischen live Memory und deadMemory unterscheiden

� dead Memory deallozieren

DC

BA

rootroot

A B

DC

9 von 17

Page 19: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

MARK-AND-SWEEP

A B C D

10 von 17

Page 20: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

MARK-AND-SWEEP

A B C D

10 von 17

Page 21: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

MARK-AND-SWEEP

A B C D

10 von 17

Page 22: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

MARK-AND-SWEEP

A B C D

10 von 17

Page 23: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

MARK-AND-SWEEP

A B C D

10 von 17

Page 24: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

MARK-AND-SWEEP

A B D

10 von 17

Page 25: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GENERATIONAL GARBAGE COLLECTION

� Kurzlebige Objekte� Haufige Garbage Collection

� Langlebige Objekte� Seltene Garbage Collection

11 von 17

Page 26: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GENERATIONAL GARBAGE COLLECTION

� Kurzlebige Objekte� Haufige Garbage Collection

� Langlebige Objekte� Seltene Garbage Collection

11 von 17

Page 27: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GENERATIONAL GARBAGE COLLECTION

Young generation� Kurzlebige Objekte� Haufige Garbage Collection

� Langlebige Objekte� Seltene Garbage Collection

12 von 17

Page 28: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

GENERATIONAL GARBAGE COLLECTION

Young generation� Kurzlebige Objekte� Haufige Garbage Collection

Old generation� Langlebige Objekte� Seltene Garbage Collection

13 von 17

Page 29: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

COMPILER

� V8 verfugt uber 2 Compiler� Full Compiler: erzeugt guten Code� Optimizing Compiler: erzeugt wirklich guten Code

14 von 17

Page 30: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

FULL COMPILER

� 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

Page 31: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

DER OPTIMIZING COMPILER

� 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 { } konnennicht oder nur schwer optimiert werden.

16 von 17

Page 32: Google's JavaScript Engine: V8held/teaching/wiss... · Allgemein V8 intern Google’s JavaScript Engine: V8 Thomas Hutter (1120239)¨ Mario Preishuber (1120643) Fachbereich Computerwissenschaften

Allgemein V8 intern

DANKE, FUR DIE AUFMERKSAMKEIT!

Fragen?

17 von 17