v8はJVMのようにスタックとヒープを使用しますか?もしそうなら、それはスタックにプリミティブを置き、ヒープにオブジェクトを置きますか?
はい、V8はJVMや他のほとんどの言語と同様のヒープを使用します。ただし、これは、ローカル変数(原則として)がスタックに配置され、オブジェクトがヒープ内に配置されることを意味します。たとえば、関数がこれらの値を閉じた場合、これは当てはまらない可能性があります。 JVMと同様に、プリミティブはローカル変数に格納されている場合にのみスタックに格納できます。
ユーザーとして、それはあなたが通常心配する必要があるものではありません。
null
、undefined
、true
、およびfalse
は内部的に ヒープ割り当てオブジェクト です。 Javaから来ている場合、V8のtrue
とfalse
はJavaのBoolean.TRUE
とBoolean.FALSE
に似ていると言えます。 。V8には、非最適化(別名フル)と最適化の2つのコンパイラがあります。
JVMと言えば、いわゆるスタック割り当てを実行し、ヒープの代わりにスタックにエスケープしないオブジェクトを割り当てることができます。より一般的な最適化(スカラー置換)は、エスケープしないオブジェクトの割り当てを完全に排除し、それを別々のフィールドに分解できる場合があります。
最も一般的な用語では、Yes V8は機能にヒープとスタックを使用し、一般的なローカル変数はスタックに格納され、保守が必要なオブジェクトはヒープに格納されます。