mozilla

比较版本

JS 引擎比较

更改版本

修订版 518555:

由 Kennyluck 在 进行的修订 518555

修订版 519417:

由 Kennyluck 在 进行的修订 519417

标题:
JS 引擎比较
JS 引擎比较
网址缩略名:
SpiderMonkey/Comparision_of_JS_engines
SpiderMonkey/Comparision_of_JS_engines
内容:

修订版 518555
修订版 519417
n11      本页用来纪录各个开源 JS 引擎(SpiderMonkey、V8、JavaScriptCore)在算法、未来趋势上的比n11      本页用来纪录各个开源 JS 引擎(SpiderMonkey、V8、JavaScriptCore)在算法、未来趋势上的比
>较。>较。除非额外说明,内存相关的数据<strong>假设系统为 32 位</strong>。
n14      常见函数词汇比较表n14      类函数词汇比较表
nn19    <h3>
20      重要基础概念
21    </h3>
n39            <a href="http://code.google.com/p/v8/source/browse/brn42            <a href="http://code.google.com/p/v8/source/browse/br
>anches/bleeding_edge/src/objects.h?r=18933#930" title="src/object>anches/bleeding_edge/src/objects.h?r=19048#930" title="src/object
>s.h:v8::internal::MaybeObject *"><code style="white-space: nowrap>s.h:v8::internal::MaybeObject *"><code style="white-space: nowrap
>">MaybeObject *</code></a>>">MaybeObject *</code></a>
tt46          </td>
47        </tr>
48        <tr>
49          <td>
50            &nbsp;<a href="http://hg.mozilla.org/mozilla-central/
 >file/f550b112a19b/js/src/vm/ObjectImpl.h#l685" title="src/vm/Obje
 >ctImpl.h::js::ObjectImpl"><code>ObjectImpl</code></a>
51          </td>
52          <td>
53            <a href="http://code.google.com/p/v8/source/browse/br
 >anches/bleeding_edge/src/objects.h?r=19048#2089" title="src/objec
 >ts.h:v8::internal::JSObject"><code>JSObject</code></a>
54          </td>
55          <td>
56            JS 对象(<code>obj instanceof Object</code>)的实现类。SpiderM
 >onkey 与 V8 皆是把部分属性存放在对象行内,部分用外链的一个数组储存的模式。SpiderMonkey 也将小数组的数据存在
 >行内(但是<a href="http://hg.mozilla.org/mozilla-central/file/f550b112
 >a19b/js/src/jsgc.h#l258">不会分两半</a>),而 V8 的 JS 数组对象(貌似)都是将数据存在外链的数
 >组上。在 SpiderMonkey 中,只有在 new space 的 JS 对象的外链数组的空间由虚拟机分配,其他情况的外链数组
 >的空间<a href="http://hg.mozilla.org/mozilla-central/file/f550b112a1
 >9b/js/src/gc/Nursery.cpp#l582">由 <code>malloc</code> 分配</a>(因此内存会
 >比较分裂?)。<code>ObjectImpl</code> 除了有连接到 <code>Shape</code> 的指针之外,还有
 >一个链到 <code>TypeObject</code> 的指针:16 B(<code>ObjectImpl</code>)vs.
 > 12 B(<code>JSObject</code>)。在 SpiderMonkey 中,数据用 <code>Value</co
 >de> 存,也就是说,对于一个有 <em>k</em> 个行内属性的 JS 对象来说,内存占用是:16 B + <em>k</em
 >> * 8 B(<code>ObjectImpl</code>)vs. 12 B + <em>k</em> * 4 B(<code
 >>JSObject</code>),行外的情形 V8 则会再多用 8 B(<code>FixedArray</code> 的标头)
 >
57          </td>
58        </tr>
59        <tr>
60          <td>
61            <span style="white-space: nowrap"><a href="http://hg.
 >mozilla.org/mozilla-central/file/f550b112a19b/js/src/vm/Shape.h#l
 >37" title="src/vm/Shape.h::js::Shape"><code>Shape</code></a>、<cod
 >e><a href="http://hg.mozilla.org/mozilla-central/file/f550b112a19
 >b/js/src/jsinfer.h#l868" title="src/jsinfer.h::js::types::TypeObj
 >ect">TypeObject</a>、</code><a href="http://hg.mozilla.org/mozilla
 >-central/file/73eefb421e2a/js/public/Class.h#l590" title="public/
 >Class.h::js::Class"><code>Class</code></a></span>
62          </td>
63          <td>
64            <a href="http://code.google.com/p/v8/source/browse/br
 >anches/bleeding_edge/src/objects.h?r=19048#5769" title="src/objec
 >ts.h:v8::internal::Map"><code>Map</code></a>
65          </td>
66          <td>
67            隐藏类的实现类。在 SpiderMonkey 中,属性名存在 <code>Shape</code> 上(因
 >此带有 V8 的 <code>DescriptorArray</code> 的作用),JS 对象的原型存在 <code>TypeO
 >bject</code> 上,特殊属性的处理方法存在 <code>Class</code> 上(<code>Class</code
 >> 对象不是 JS 堆里的对象,大部分都共用:<code>JSObject::class_</code>、<code>JSFunc
 >tion::class_……</code>)。由于 V8 的 <code>Map</code> 有 SM 三个类的作用,因此占用内
 >存也比较多:24 B(<code>Shape</code>)vs. 40 B(<code>Map</code>)。
68          </td>
69        </tr>
70      </tbody>
71    </table>
72    <h3>
73      内存布局与对象创建
74    </h3>
75    <h3>
76      运行时
77    </h3>
78    <table class="standard-table">
79      <tbody>
80        <tr>
81          <th scope="col">
82            SpiderMonkey
83          </th>
84          <th scope="col">
85            V8
86          </th>
87          <th scope="col">
88            备注
89          </th>
90        </tr>
91        <tr>
92          <td>
93            <code>Interpret</code>
94          </td>
95          <td>
96            <code style="white-space: nowrap">(无)</code>
97          </td>
98          <td>
99            解释器的主回圈。V8 没有字节码与解释器。
100          </td>
101        </tr>
102      </tbody>
103    </table>
104    <h3>
105      堆与 GC
106    </h3>
107    <table class="standard-table">
108      <tbody>
109        <tr>
110          <th scope="col">
111            SpiderMonkey
112          </th>
113          <th scope="col">
114            V8
115          </th>
116          <th scope="col">
117            备注
118          </th>
119        </tr>
120        <tr>
121          <td>
122            <code>Nursery</code>
123          </td>
124          <td>
125            <code style="white-space: nowrap">NewSpace</code>
126          </td>
127          <td>
128            &nbsp;

返回历史