v8ではインラインキャッシングがパフォーマンスを向上させることがわかっているので、
誰かがv8が正確に何をするのか、そしてそれがパフォーマンスを改善するためにどのように機能するのかを説明できますか?
例が示されていれば、それは素晴らしいことです。
前もって感謝します。
v8ではインラインキャッシングがパフォーマンスを向上させることがわかっているので、
誰かがv8が正確に何をするのか、そしてそれがパフォーマンスを改善するためにどのように機能するのかを説明できますか?
例が示されていれば、それは素晴らしいことです。
前もって感謝します。
ChromeV8ページから直接取得
V8は、JavaScriptソースコードを最初に実行されたときにマシンコードに直接コンパイルします。中間バイトコードやインタプリタはありません。プロパティアクセスは、V8の実行時に他のマシン命令でパッチされる可能性のあるインラインキャッシュコードによって処理されます。
と
... V8は、この[オブジェクトの]クラスがコードの同じセクションでアクセスされる将来のすべてのオブジェクトにも使用されることを予測することでプロパティアクセスを最適化し、クラス内の情報を使用してインラインキャッシュコードにパッチを適用し、非表示のクラスを使用します。V8が正しく予測した場合、プロパティの値は1回の操作で割り当て(またはフェッチ)されます。予測が正しくない場合、V8はコードにパッチを適用して最適化を削除します。
たとえば、PointオブジェクトからプロパティxにアクセスするためのJavaScriptコードは次のとおりです。
point.x
V8では、xにアクセスするために生成されるマシンコードは次のとおりです。
# ebx = the point object
cmp [ebx,<hidden class offset>],<cached hidden class>
jne <inline cache miss>
mov eax,[ebx, <cached x offset>]