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