水島雄太のブログ

個人的かつ雑多なブログです。

JavaScriptのガベージコレクション

JavaScriptGCアルゴリズム

昔は参照カウント方式でガベージコレクションを行っていたが、参照カウント方式では例えば以下のようなサンプルコードでメモリリークが発生してしまう。

var div;
window.onload = function(){
  div = document.getElementById("myDivElement");
  div.circularReference = div;
  div.lotsOfData = new Array(10000).join("*");
};

この問題を回避するために、最近のJavaScript実装では マーク·アンド·スイープアルゴリズム を用いていることが多い。

マーク・アンドスイープアルゴリズムについては、

Java Memory Managementを読んだ - 真面目に、強く、上品に

でも述べたことがあるが、Javaでも同様のガベージコレクションアルゴリズムが使われている。

参考

https://www.amazon.co.jp/dp/4798134201

メモリ管理 - JavaScript | MDN