Google’s JavaScript Engine: V8 Thomas H ¨ utter (1120239) Mario Preishuber (1120643) Fachbereich Computerwissenschaften Naturwissenschaftliche Fakult¨ at 24. Februar 2014 1 von 17
Allgemein V8 intern
Google’s JavaScript Engine: V8
Thomas Hutter (1120239)Mario Preishuber (1120643)
Fachbereich ComputerwissenschaftenNaturwissenschaftliche Fakultat
24. Februar 2014
1 von 17
Allgemein V8 intern
INHALT
AllgemeinWas ist JavaScript?EigenschaftenWas ist ein JavaScript Engine?
V8 internHidden classesGarbage CollectorCompiler
2 von 17
Allgemein V8 intern
WAS IST JAVASCRIPT?
� Web Browser� Client-seitig� Dynamische Gestaltung von Webseiten� JavaScript 6= Java
3 von 17
Allgemein V8 intern
EIGENSCHAFTEN
� JavaScript ist extrem dynamisch� Beispiel Objekte
� Attribute konnen zur Laufzeit hinzgefugt oder entfernt werden� Sind Hash Maps
4 von 17
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
Allgemein V8 intern
GOOGLE’S
6 von 17
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
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
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
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
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
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
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
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
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
Allgemein V8 intern
GARBAGE COLLECTOR
� Zwischen live Memory und deadMemory unterscheiden
� dead Memory deallozieren
DC
BA
root
9 von 17
Allgemein V8 intern
GARBAGE COLLECTOR
� Zwischen live Memory und deadMemory unterscheiden
� dead Memory deallozieren
DC
BA
root
9 von 17
Allgemein V8 intern
GARBAGE COLLECTOR
� Zwischen live Memory und deadMemory unterscheiden
� dead Memory deallozieren
DC
BA
rootroot
A B
DC
9 von 17
Allgemein V8 intern
MARK-AND-SWEEP
A B C D
10 von 17
Allgemein V8 intern
MARK-AND-SWEEP
A B C D
10 von 17
Allgemein V8 intern
MARK-AND-SWEEP
A B C D
10 von 17
Allgemein V8 intern
MARK-AND-SWEEP
A B C D
10 von 17
Allgemein V8 intern
MARK-AND-SWEEP
A B C D
10 von 17
Allgemein V8 intern
MARK-AND-SWEEP
A B D
10 von 17
Allgemein V8 intern
GENERATIONAL GARBAGE COLLECTION
� Kurzlebige Objekte� Haufige Garbage Collection
� Langlebige Objekte� Seltene Garbage Collection
11 von 17
Allgemein V8 intern
GENERATIONAL GARBAGE COLLECTION
� Kurzlebige Objekte� Haufige Garbage Collection
� Langlebige Objekte� Seltene Garbage Collection
11 von 17
Allgemein V8 intern
GENERATIONAL GARBAGE COLLECTION
Young generation� Kurzlebige Objekte� Haufige Garbage Collection
� Langlebige Objekte� Seltene Garbage Collection
12 von 17
Allgemein V8 intern
GENERATIONAL GARBAGE COLLECTION
Young generation� Kurzlebige Objekte� Haufige Garbage Collection
Old generation� Langlebige Objekte� Seltene Garbage Collection
13 von 17
Allgemein V8 intern
COMPILER
� V8 verfugt uber 2 Compiler� Full Compiler: erzeugt guten Code� Optimizing Compiler: erzeugt wirklich guten Code
14 von 17
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
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
Allgemein V8 intern
DANKE, FUR DIE AUFMERKSAMKEIT!
Fragen?
17 von 17