JavaScript virtual machines

Константин Кривленя

Компания Taucraft

JavaScript virtual machines

Что такое виртуальная машина?

Виртуальная машина программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы (target — целевая, или гостевая платформа) и исполняющая программы для target-платформы на host-платформе (host — хост-платформа, платформа-хозяин)

Examples

Как работает виртуальная машина?

Parser

Intermediate Representation

Stack vs. register

Garbage Collection

Mark-and-sweep

Optimization Magic

JIT

Type inference

a + b

Ожидаю шуточек

Hidden classes

         function Point(x, y) {
            this.x = x;
            this.y = y;
        }
        
         function Point(x, y) {
            this.x = x;
            this.y = y;
        }
        
         function Point(x, y) {
            this.x = x;
            this.y = y;
        }
        
         function Point(x, y) {
            this.x = x;
            this.y = y;
        }
        

Inline cache

For example, the JavaScript code to access property x from a Point object is:
point.x
In V8, the machine code generated for accessing x is:
        # ebx = the point object
        cmp [ebx, <hidden class offset>],<cached hidden class>
        jne <inline cache miss>
        mov eax,[ebx, <cached x offset>]
         

Результаты

Dromaeo Score (The higher the better)

SunSpider Runtime (The lower the better)

V8 Benchmark Suite Score (The higher the better)

V8

Lars Bak

Еще движки

Rhino is SLOW, why?

Solution: invokedynamic

Вопросы?

links

Контакты

Twitter (https://twitter.com/Krivlenia/)
Github (https://github.com/Mavrin/)
Хабр (http://habrahabr.ru/users/mavrin/)