Dart VM の紹介
Outline


Dart VM 1.1



Dart2js 1.1



Dart VM の特長
2014/02/22 Dart Flight School 2014 Tokyo
nothingcosmos <nothingcosmos@gmail.com>
自己紹介


Twitter:nothingcosmos



名前 : 坂頂佑樹 所属 :



趣味 :OSS のコードを弄る



Blog:http://nothingcosmos.blog52.fc2.com/



Dart VM Advent Calender 2012
http://nothingcosmos.github.io/DartVM/index.html



Dart VM のソースコードリーディング
Dart VM のゴール
Dart VM 1.1


Dart VM とは、 JVM 、 V8 みたいなもの。



Dart のコードを JIT コンパイルして高速に実行可能



対応アーキテクチャは、 x86/x64/arm/mips



対応 OS は、 Linux/Windows/MacOS/Android



ここ半年で ARM + Android 対応完了



V8 より高速だが、 2 倍はいかない。
一時期はほぼ 2 倍差をつけたけど、その後
V8 が怒濤の追い込み。。
今は V8 の 40 ~ 50% 速いくらい
Computer Language Benchmark Games
x86 Ubuntu™ Intel® Q6600® one core
Dart / Java7

IO が List<int>
結構遅い

Java なのに GMP 使ってる
BigInteger 同士だと等速
Dart は簡易 regex engine のみ
ブラウザ搭載時に
Irregexp に置き換え
ここ 1 年くらいの Dart VM


2013/01 arm mips の skeleton を追加。 Typed array の高速な実装を追加



2013/02 mixin を追加開始



2013/03 Field type feedback 最適化を追加し、全体的に 30% 程度性能向上



2013/04 ARM と MIPS の simulator 上のコンパイル、動作確認



2013/06 On-Stack Replacement の追加



2013/07 NEON 対応。 Mirror の高速化



2013/08 Profile Guided Code Positioning の追加



2013/09 ARM 対応ほぼ完了。 vm service を追加開始



2013/10 Constant Blinding の追加。



2013/11 Dart 1.0 リリース



2013/12 Field 操作の mutable 化



2014/01 Dart 1.1 リリース
dart2js 1.1


Dart で開発されている、 Dart から JavaScript への変換
Dart VM がないブラウザでも動作可能



高速化中、手書きの JavaScript V8 と等速、ちょい速いくらい。



Dart 1.0 より、ベンチマークの Richard が 25% アップ。
http://news.dartlang.org/2014/01/dart-11-features-up-to-25-faster.html



いろいろと最適化を追加して高速化と出力 js の圧縮を頑張っている



ベンチマークは Octane や Dromaeo や Box2D っぽい。
Dart2js Tracer Benchmark
https://www.dartlang.org/performance/

SsaLoadElimination

type_graph_inferrer
Dart VM の特長
ここから VM の雑学


JIT コンパイル



Dart VM Architecture と Isolate



Snapshot と高速起動



Message passing と Event Driven



Optional Typing & Generics & Checked Mode



Dartium
Dart VM と JIT コンパイル (1)


インタプリタなし、 2 段階の JIT コンパイル



IRHydra がわかりやすい。
http://mrale.ph/irhydra/2/#demo-4

Entrypoint である mainscript を
SingleThreading で
JIT コンパイルしてから実行する

関数呼び出し fibo を見つける
fibo はまだコンパイルしていないため、
fibo 関数を JIT コンパイルする
Dart VM と JIT コンパイル (2)


最初の JIT コンパイルは、
どんな型でも動くように汎用コンパイル



型情報の収集を埋込

fibo 関数を JIT コンパイルした後、
fibo 関数の実行に戻る

fibo 関数を再帰的に実行
コンパイル済みの汎用コードを実行する
Dart VM と JIT コンパイル (3)


何度も実行される関数は、最適化 JIT コンパイル
収集した型情報を利用し、
型を特殊化してコンパイル、高速に実行可能
fibo 関数を何度も実行すると、
fibo 関数の最適化 JIT コンパイルが走る。
汎用的な fibo から、最適化した fibo に置き換え

Heap が足りなくなったら、
全体の動作を止めて、 GC を実行し、
heap を確保する。
Dart

Dart VM Architecture
Dart の世界
Debugger で
追える境界

sdk/lib/io

NativeSymbol
C++/Asm
OS/Kernel

sdk/lib
patch_class

VM の境界
Native Extensions
シンボルを定義

runtime/lib/*.cc
runtime/bin/*.cc
IO_NATIVES

BOOTSTRAP_
NATIVES

runtime/lib
runtime/bin
I/O や Network
を非同期に実行

runtime/platform

runtime/
include

runtime/vm
runtime/vm/os

OS(Linux, Windows,
MacOS, Android)

ISA(arch)
ia32/x64/arm/mips

VM が担当する
計算やリソース管理
Dart VM Isolate

Isolate 横断

BOOTSTRAP_NATIVES
Dart レイヤから C++ への binding/Native Extentions

JITCompiler のみ
インタプリタ無し

intrinsifier/runtime_entry

compiler

GC
Isolate ごとに
GC と heap

object
pool/code
heap
isolate

port_map
Message
Passing は
port 経由

dart
context

runtime
stubs
Dart_Api
include
Isolate 単位に独立
Single Threading で
動作する

thread_pool
OS の Process

VM の共有リソース
Isolate Spawn
ここより上の Dart のレイヤーには
Lock が存在しない

intrinsifier/runtime_entry
runtime
stubs

dart
context
object
pool/code

compiler
GC

heap

runtime
stubs
compiler
GC

isolate
Thread
port_map

isolate 間は port 経由で
message passing

dart
context
object
pool/code
heap

Spawn した
Isolate

Dart_Api
include

isolate
Lock は不要
独立して実行

Thread

thread_pool
OS の Process 共有リソースでは Lock するが、
非常に少ない。
Dart VM の特長
ここから VM の雑学


JIT コンパイル



Dart VM Architecture と Isolate



Snapshot と高速起動



Message passing と Event Driven



Optional Typing & Generics & Checked Mode



Dartium
Dart Snapshot


Dart VM の object の serialize/deserialize 機能
圧縮率と速度優先
アーキテクチャ非互換 (x86-x64-ARM 間の相互変換は不可能 )



起動の高速化



MessagePassing の際の serialize/deserialize にも使用する。
serialize した object を port 経由で送受信する。



自分の作ったライブラリもあらかじめ snapshot できる。



大体 JSON と同じだけど、追加で VM の内部 object も対象。
VM 起動の高速化


Dart VM は make の際に、 2 回 build を行う。
1 回目は dart_no_snapshot を build し、 SDK の core を読み込み起動。
core の dart src を scan し、 snapshot 、 snapshot_buffer[] に書き出し。



2 回目で snapshot_buffer[] を取り込んで dart を build する。 +400kbyte
dart は Core の I/O と Scan を skip できるので、起動時間が短縮できる。
--time-bootstrap オプションで比較可能。



bootstrap が短縮、 100,000micros -> 100micros



Core の dart src を read して scan vs. binary から直接 deserialize
bootstrap の短縮
fibo(40) の実行時間 (ms)

130ms
540
dart_no_snapshot

410
fibo
time

20ms

起動時のオー
430 バーヘッドが 1/6
scan が 100ms
410 から 0.1ms に

dart

0

100

200

300

400

500

600
Isolate 間の MessagePassing
SnapshotWriter
serialize

SnapshotReader
deserialize

Isolate
Message
HandlerTask

Isolate
Message
Handler

Message
Handler

Thread

Message
HandlerTask
Thread

port_map
相手の Isolate に
message を送る
ReceivePort を
全部 mapping してある
Isolate の StartUp(1)
main が終わったら、
MessageHandler で
EventLoop

Task が
Thread を生成
1 個だけ
Isolate の初期化

Main script
Async micro task
残っている限り
仕事し続ける。

Isolate
Message
HandlerTask

Message
Handler

Thread
thread
pool

dart.cc の
main() 関数

port_map

並行して
Message
Receive
Isolate の StartUp(2)
main が終わったら、
MessageHandler で
EventLoop

Main script
async task が
残っている限り
仕事し続ける。

Isolate
Message
HandlerTask

Message
Handler

Thread

Message
Receive

port_map

Unhandled exception:
type 'double' is not a subtype of type 'int' of 'num'.
#0
func (file:///syntax/lib/diff/future.dart:28:13)
#1
main (file:///syntax/lib/diff/future.dart:33:7)
#2
_startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216)
#3
_RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)
MessageHandler and EventLoop


https://www.dartlang.org/articles/event­loop/



Async 系の microtask は mainscript が
終了後に実行する。

2.streamFibo
3.scheduleMicroTask
5.run microTask

1.main の起動
6.async task

4.main 終了
MessageHandler and EventLoop

#4
#5
#6
#7
#8
#9
#10
#11
#12
#13

Stream.forEach.<anonymous closure> (dart:async/stream.dart:473)
2.streamFibo
_rootRunUnary (dart:async/zone.dart:695)
_RootZone.runUnary (dart:async/zone.dart:834)
_BaseZone.runUnaryGuarded (dart:async/zone.dart:546)
3.Loop
_BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:333)
_DelayedData.perform (dart:async/stream_impl.dart:585)
_StreamImplEvents.handleNext (dart:async/stream_impl.dart:701)
_PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:661)
_asyncRunCallback (dart:async/schedule_microtask.dart:18)
_RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:119)

仮にここの async で error になったら
EventLoop And Zone


Zone は RootZone から parent が fork して
木構造でつながる。



scheduleMicrotask で 1Thrad で順次実行
Zone の木構造を辿り実行

zone

root_zone

zone
Dart VM の特長
ここから VM の雑学


JIT コンパイル



Dart VM Architecture と Isolate



Snapshot と高速起動



Message passing と Event Driven



Optional Typing & Generics & Checked Mode



Dartium
Dart Optional Typing


Dart には production mode と checked mode がある。



Dart には 3 つのフェーズがある。




compile フェーズ。 script 実行前の jit compile 時に error/warning 検出





analyzer フェーズ。 IDE による error/warning の検出
runtime フェーズ。実行時の型情報を validation する。

checked mode では、 compile フェーズで型エラー /warning を無視しない。
compile 時に型情報の validation 命令を挿入し、実行時に assert する。



Dart の型は、 type annotation による validation と割り切っている。
validation のタイミングは上記 3 つ。 runtime に影響を与えない。
Dart Optional Typing


Dart の型の違反は、基本的に warning 扱い



何が error で何が warning かは、他の言語と比較すると結構曖昧かも。
Breaking on exception:
type 'double' is not a subtype of type 'int' of 'num'.

int sum = 100 + 100.0;

int num = 100.0;

IDE/ コンパイル時に warning と分かるし、
binaryoperator(+) の 2 引数の validation 命令を
JIT コンパイル時に挿入する。
実行時に validation されて warning

こちらは = の assign に validation 版の命令を
JIT コンパイル時に挿入する。
実行時に validation されて warning

Breaking on exception:
type 'double' is not a subtype of type 'int' of 'num'.
Dart Generics


Class の Reified Generics のみ ( 型パラメータを保存する領域あり )
Generics を使用した場合のみ、 Class のインスタンスを new する際に、
型パラメータを保存する命令を挿入する。
TypeArguments っていう IR が存在する。



型パラメータは、実行時にいつでも参照できる。



Method generics は存在しない。



型パラメータを参照するのは、 checked mode のみ。
Generics の型パラメータも validation される。
Dartium
dartium
標準化された API を
IDL から自動生成
dartium 連携用

native
symbol

Web IDL
Auto-generated library
sdk/lib/html

dart runtime

sdk/lib

dartium で定義された
シンボルを Native Extensions
を使用して直接呼出て連携する。

runtime/
include

dartium からの制御は
include で定義された
API 経由で
dart runtime に指示
Dartium の binding

dartium/src/third_party/WebKit/Source/bindings/dart
dartium/src/third_party/WebKit/Source/bindings/v8

Bindings (Dart API)

JavaScript
V8

Dart VM

Dart のページを読み込んだ場合のみ起動
VM の遅延ローディング
今後の予想


Chrome に Dart VM を搭載するのでは。早ければ 2015 年?
WebKit から Blink になりましたし、邪魔する人はいないはず



まずは Oilpan(GC for Blink) でメモリリークを解消してから?
http://goo.gl/gCugZ4



ARM + Android 上でも動くため、
モバイルの Chrome にも問題なく搭載できるのでは?



モバイル最速の VM かもだけど、
V8 と Dart VM の同時起動はメモリ食いそう。。

2014 dart flight school in Tokyo

  • 1.
    Dart VM の紹介 Outline  DartVM 1.1  Dart2js 1.1  Dart VM の特長 2014/02/22 Dart Flight School 2014 Tokyo nothingcosmos <nothingcosmos@gmail.com>
  • 2.
    自己紹介  Twitter:nothingcosmos  名前 : 坂頂佑樹 所属:  趣味 :OSS のコードを弄る  Blog:http://nothingcosmos.blog52.fc2.com/  Dart VM Advent Calender 2012 http://nothingcosmos.github.io/DartVM/index.html  Dart VM のソースコードリーディング
  • 3.
  • 4.
    Dart VM 1.1  DartVM とは、 JVM 、 V8 みたいなもの。  Dart のコードを JIT コンパイルして高速に実行可能  対応アーキテクチャは、 x86/x64/arm/mips  対応 OS は、 Linux/Windows/MacOS/Android  ここ半年で ARM + Android 対応完了  V8 より高速だが、 2 倍はいかない。 一時期はほぼ 2 倍差をつけたけど、その後 V8 が怒濤の追い込み。。 今は V8 の 40 ~ 50% 速いくらい
  • 5.
    Computer Language BenchmarkGames x86 Ubuntu™ Intel® Q6600® one core Dart / Java7 IO が List<int> 結構遅い Java なのに GMP 使ってる BigInteger 同士だと等速 Dart は簡易 regex engine のみ ブラウザ搭載時に Irregexp に置き換え
  • 6.
    ここ 1 年くらいのDart VM  2013/01 arm mips の skeleton を追加。 Typed array の高速な実装を追加  2013/02 mixin を追加開始  2013/03 Field type feedback 最適化を追加し、全体的に 30% 程度性能向上  2013/04 ARM と MIPS の simulator 上のコンパイル、動作確認  2013/06 On-Stack Replacement の追加  2013/07 NEON 対応。 Mirror の高速化  2013/08 Profile Guided Code Positioning の追加  2013/09 ARM 対応ほぼ完了。 vm service を追加開始  2013/10 Constant Blinding の追加。  2013/11 Dart 1.0 リリース  2013/12 Field 操作の mutable 化  2014/01 Dart 1.1 リリース
  • 7.
    dart2js 1.1  Dart で開発されている、Dart から JavaScript への変換 Dart VM がないブラウザでも動作可能  高速化中、手書きの JavaScript V8 と等速、ちょい速いくらい。  Dart 1.0 より、ベンチマークの Richard が 25% アップ。 http://news.dartlang.org/2014/01/dart-11-features-up-to-25-faster.html  いろいろと最適化を追加して高速化と出力 js の圧縮を頑張っている  ベンチマークは Octane や Dromaeo や Box2D っぽい。
  • 8.
  • 9.
    Dart VM の特長 ここからVM の雑学  JIT コンパイル  Dart VM Architecture と Isolate  Snapshot と高速起動  Message passing と Event Driven  Optional Typing & Generics & Checked Mode  Dartium
  • 10.
    Dart VM とJIT コンパイル (1)  インタプリタなし、 2 段階の JIT コンパイル  IRHydra がわかりやすい。 http://mrale.ph/irhydra/2/#demo-4 Entrypoint である mainscript を SingleThreading で JIT コンパイルしてから実行する 関数呼び出し fibo を見つける fibo はまだコンパイルしていないため、 fibo 関数を JIT コンパイルする
  • 11.
    Dart VM とJIT コンパイル (2)  最初の JIT コンパイルは、 どんな型でも動くように汎用コンパイル  型情報の収集を埋込 fibo 関数を JIT コンパイルした後、 fibo 関数の実行に戻る fibo 関数を再帰的に実行 コンパイル済みの汎用コードを実行する
  • 12.
    Dart VM とJIT コンパイル (3)  何度も実行される関数は、最適化 JIT コンパイル 収集した型情報を利用し、 型を特殊化してコンパイル、高速に実行可能 fibo 関数を何度も実行すると、 fibo 関数の最適化 JIT コンパイルが走る。 汎用的な fibo から、最適化した fibo に置き換え Heap が足りなくなったら、 全体の動作を止めて、 GC を実行し、 heap を確保する。
  • 13.
    Dart Dart VM Architecture Dartの世界 Debugger で 追える境界 sdk/lib/io NativeSymbol C++/Asm OS/Kernel sdk/lib patch_class VM の境界 Native Extensions シンボルを定義 runtime/lib/*.cc runtime/bin/*.cc IO_NATIVES BOOTSTRAP_ NATIVES runtime/lib runtime/bin I/O や Network を非同期に実行 runtime/platform runtime/ include runtime/vm runtime/vm/os OS(Linux, Windows, MacOS, Android) ISA(arch) ia32/x64/arm/mips VM が担当する 計算やリソース管理
  • 14.
    Dart VM Isolate Isolate横断 BOOTSTRAP_NATIVES Dart レイヤから C++ への binding/Native Extentions JITCompiler のみ インタプリタ無し intrinsifier/runtime_entry compiler GC Isolate ごとに GC と heap object pool/code heap isolate port_map Message Passing は port 経由 dart context runtime stubs Dart_Api include Isolate 単位に独立 Single Threading で 動作する thread_pool OS の Process VM の共有リソース
  • 15.
    Isolate Spawn ここより上の Dartのレイヤーには Lock が存在しない intrinsifier/runtime_entry runtime stubs dart context object pool/code compiler GC heap runtime stubs compiler GC isolate Thread port_map isolate 間は port 経由で message passing dart context object pool/code heap Spawn した Isolate Dart_Api include isolate Lock は不要 独立して実行 Thread thread_pool OS の Process 共有リソースでは Lock するが、 非常に少ない。
  • 16.
    Dart VM の特長 ここからVM の雑学  JIT コンパイル  Dart VM Architecture と Isolate  Snapshot と高速起動  Message passing と Event Driven  Optional Typing & Generics & Checked Mode  Dartium
  • 17.
    Dart Snapshot  Dart VMの object の serialize/deserialize 機能 圧縮率と速度優先 アーキテクチャ非互換 (x86-x64-ARM 間の相互変換は不可能 )  起動の高速化  MessagePassing の際の serialize/deserialize にも使用する。 serialize した object を port 経由で送受信する。  自分の作ったライブラリもあらかじめ snapshot できる。  大体 JSON と同じだけど、追加で VM の内部 object も対象。
  • 18.
    VM 起動の高速化  Dart VMは make の際に、 2 回 build を行う。 1 回目は dart_no_snapshot を build し、 SDK の core を読み込み起動。 core の dart src を scan し、 snapshot 、 snapshot_buffer[] に書き出し。  2 回目で snapshot_buffer[] を取り込んで dart を build する。 +400kbyte dart は Core の I/O と Scan を skip できるので、起動時間が短縮できる。 --time-bootstrap オプションで比較可能。  bootstrap が短縮、 100,000micros -> 100micros  Core の dart src を read して scan vs. binary から直接 deserialize
  • 19.
    bootstrap の短縮 fibo(40) の実行時間(ms) 130ms 540 dart_no_snapshot 410 fibo time 20ms 起動時のオー 430 バーヘッドが 1/6 scan が 100ms 410 から 0.1ms に dart 0 100 200 300 400 500 600
  • 20.
  • 21.
    Isolate の StartUp(1) mainが終わったら、 MessageHandler で EventLoop Task が Thread を生成 1 個だけ Isolate の初期化 Main script Async micro task 残っている限り 仕事し続ける。 Isolate Message HandlerTask Message Handler Thread thread pool dart.cc の main() 関数 port_map 並行して Message Receive
  • 22.
    Isolate の StartUp(2) mainが終わったら、 MessageHandler で EventLoop Main script async task が 残っている限り 仕事し続ける。 Isolate Message HandlerTask Message Handler Thread Message Receive port_map Unhandled exception: type 'double' is not a subtype of type 'int' of 'num'. #0 func (file:///syntax/lib/diff/future.dart:28:13) #1 main (file:///syntax/lib/diff/future.dart:33:7) #2 _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)
  • 23.
    MessageHandler and EventLoop  https://www.dartlang.org/articles/event­loop/  Async系の microtask は mainscript が 終了後に実行する。 2.streamFibo 3.scheduleMicroTask 5.run microTask 1.main の起動 6.async task 4.main 終了
  • 24.
    MessageHandler and EventLoop #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 Stream.forEach.<anonymousclosure> (dart:async/stream.dart:473) 2.streamFibo _rootRunUnary (dart:async/zone.dart:695) _RootZone.runUnary (dart:async/zone.dart:834) _BaseZone.runUnaryGuarded (dart:async/zone.dart:546) 3.Loop _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:333) _DelayedData.perform (dart:async/stream_impl.dart:585) _StreamImplEvents.handleNext (dart:async/stream_impl.dart:701) _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:661) _asyncRunCallback (dart:async/schedule_microtask.dart:18) _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:119) 仮にここの async で error になったら
  • 25.
    EventLoop And Zone  Zoneは RootZone から parent が fork して 木構造でつながる。  scheduleMicrotask で 1Thrad で順次実行 Zone の木構造を辿り実行 zone root_zone zone
  • 26.
    Dart VM の特長 ここからVM の雑学  JIT コンパイル  Dart VM Architecture と Isolate  Snapshot と高速起動  Message passing と Event Driven  Optional Typing & Generics & Checked Mode  Dartium
  • 27.
    Dart Optional Typing  Dartには production mode と checked mode がある。  Dart には 3 つのフェーズがある。   compile フェーズ。 script 実行前の jit compile 時に error/warning 検出   analyzer フェーズ。 IDE による error/warning の検出 runtime フェーズ。実行時の型情報を validation する。 checked mode では、 compile フェーズで型エラー /warning を無視しない。 compile 時に型情報の validation 命令を挿入し、実行時に assert する。  Dart の型は、 type annotation による validation と割り切っている。 validation のタイミングは上記 3 つ。 runtime に影響を与えない。
  • 28.
    Dart Optional Typing  Dartの型の違反は、基本的に warning 扱い  何が error で何が warning かは、他の言語と比較すると結構曖昧かも。 Breaking on exception: type 'double' is not a subtype of type 'int' of 'num'. int sum = 100 + 100.0; int num = 100.0; IDE/ コンパイル時に warning と分かるし、 binaryoperator(+) の 2 引数の validation 命令を JIT コンパイル時に挿入する。 実行時に validation されて warning こちらは = の assign に validation 版の命令を JIT コンパイル時に挿入する。 実行時に validation されて warning Breaking on exception: type 'double' is not a subtype of type 'int' of 'num'.
  • 29.
    Dart Generics  Class のReified Generics のみ ( 型パラメータを保存する領域あり ) Generics を使用した場合のみ、 Class のインスタンスを new する際に、 型パラメータを保存する命令を挿入する。 TypeArguments っていう IR が存在する。  型パラメータは、実行時にいつでも参照できる。  Method generics は存在しない。  型パラメータを参照するのは、 checked mode のみ。 Generics の型パラメータも validation される。
  • 30.
    Dartium dartium 標準化された API を IDLから自動生成 dartium 連携用 native symbol Web IDL Auto-generated library sdk/lib/html dart runtime sdk/lib dartium で定義された シンボルを Native Extensions を使用して直接呼出て連携する。 runtime/ include dartium からの制御は include で定義された API 経由で dart runtime に指示
  • 31.
    Dartium の binding dartium/src/third_party/WebKit/Source/bindings/dart dartium/src/third_party/WebKit/Source/bindings/v8 Bindings(Dart API) JavaScript V8 Dart VM Dart のページを読み込んだ場合のみ起動 VM の遅延ローディング
  • 32.
    今後の予想  Chrome に DartVM を搭載するのでは。早ければ 2015 年? WebKit から Blink になりましたし、邪魔する人はいないはず  まずは Oilpan(GC for Blink) でメモリリークを解消してから? http://goo.gl/gCugZ4  ARM + Android 上でも動くため、 モバイルの Chrome にも問題なく搭載できるのでは?  モバイル最速の VM かもだけど、 V8 と Dart VM の同時起動はメモリ食いそう。。