先端基本ステップ(一):メモリ空間詳細図解

6575 ワード

  :   
  :www.jianshu.com/p/996671d4dcc4
変数オブジェクトとヒープメモリ
   
   
   
   
var a = 20;
var b = 'abc' ;
var c = true;
var d = { m: 20 }

JavaScript , , , 。 , , 。

。 JS 。 JS , , 。 ? ? , 。

, JS , 。

: ,

C/C++ ,JavaScript 。 JavaScript 。 , , JavaScript ( )。 。 。

, 。 。


。 5, , 。 1, 4 , 1 。 。 。

, 。

, , , , 。 JSON , key-value でいいです. が っていますので、 たちの に はありません. の だけに を っています.
、 オブジェクトとベースデータタイプ
JavaScriptの コンテキストが されると、 オブジェクトという なオブジェクトが されます.JavaScriptの データタイプは オブジェクトに されます.
には、 の もヒープメモリに されていますが、 の となる な のため、 たちは する にはまだヒープメモリと する があります.
データタイプは なデータセグメントです.JavaScriptには5つの データタイプがあります.それぞれUndefined、Null、Boolean、Number、String. データの は でアクセスします. に されている の を することができます.
、 データタイプとヒープメモリ
の とは じません.JSの データの は、 Arayのように、それらの の きさは されていません. データタイプの は、ヒープメモリに されているオブジェクトです.JavaScriptは にメモリの の にアクセスすることができませんので、 のメモリ を することはできません.オブジェクトを するときは、 のオブジェクトではなくオブジェクトの を します.したがって、 の の はすべて でアクセスされます.ここでの は、メモリの の に けられた オブジェクトに されているアドレスの つとして く できます.
オブジェクトとメモリをよりよく るために、 の と み わせて を することができます.

var a1 = 0;   //     
var a2 = 'this is string'; //     
var a3 = null; //     

var b = { m: 20 }; //   b        ,{m: 20}            
var c = [1, 2, 3]; //   c        ,[1, 2, 3]            

したがって、 たちはヒープメモリの データの にアクセスしたいですが、 にはまず オブジェクトからそのオブジェクトのアドレス (またはアドレスポインタ)を してから、ヒープメモリから なデータを します.
JSのメモリ を すれば、メモリ の を して タイプのいくつかの を することができます.
の ではよくこのような があります.
// demo01.js
var a = 20;
var b = a;
b = 30;

//   a     ?
// demo02.js
var m = { a: 10, b: 20 }
var n = m;
n.a = 15;

//   m.a     
オブジェクトのデータがコピーされた 、システムは に しい に しい を り てます.var b = a 、aとbは20に しい ですが、 いに して しない です. には のように.ですから、bの を したら、aの は わりません.
demo 01
demo 02では、var n = m タイプをコピーする をします. タイプのコピーも に、 しい に に り てられます. オブジェクトには、この しい は、 タイプのアドレスポインタだけです.アドレスポインタが いに しているにもかかわらず、 オブジェクトにアクセスした のオブジェクトは に じです. に すように
ですから、nを えると、mも わります.これが タイプの です.
demo 02
メモリの から すると、 な じがしますか?これ にも、JavaScriptの 、 ドメインチェーン、クローズド、プロトタイプチェーンなどの な を ずつ することができます. の はこれからゆっくりまとめますので、 しみにしていてください.
メモリ
JavaScriptは ごみ を っているので、 にメモリの に がないようです.メモリの り てと は に を しました.しかし、 の によって、メモリの みを ることは、 が いたコードが に があったかを に し、より れた を つコードを することに ちます.だからメモリに を つことはとても なことです.
JavaScriptのメモリライフサイクル
1.          
2.         ( 、 )
3. 
を にするために,この を な を いて した.
var a = 20;  //              
alert(a + 100);  //     
a = null; //       ,      
と ステップはよく かります.JavaScriptは を する にメモリ り てを しました. でメモリ を するのは、 たちが に する がある です.
JavaScriptには ごみ の みがありますが、この ごみ の みの は ですか? はとても です.もう い けないものを して、 っているメモリを します.ゴミ は まった ごとに を います.
JavaScriptでは、マーククリアのアルゴリズムによって、どのオブジェクトが されていないかを つけるのが も であるので、a = null には1つのリリース の だけをして、a の する が を って、 から れると、この は のゴミ の に つけられ、 されます. な に を することは、ページのより い を るための な である.
  • では、 の が すると、 が する がなくなり、ゴミ は して しやすい.しかし、 はいつメモリ を に する があるかは しにくいので、 の では、 を するために、 の をできるだけ ける があります.