0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

エアークローゼットAdvent Calendar 2022

Day 19

Memory Management in Javascript

Last updated at Posted at 2022-12-19

はじめに

株式会社エアークローゼットでエンジニアをしているtangoと申します。

この記事はエアークローゼット アドベントカレンダー2022の19日目の記事になります。

今回はJavascriptでメモリ管理について話したいと思いますので、ぜひ最後までご覧ください。

背景

みんなさん、C言語を触ったことがありますか?

image.png

C言語を触ったことがある人にとってはわかると思いますが、大体3ステップを分けています。
① 必要なメモリを割り当てる
② 割り当てられたメモリを使用する
③ メモリを解放する

ここでのポイントは、 手動でメモリを解放するというところです。 結構めんどくさいのところですね。
もちろん、メモリを解放しなくても大丈夫ですが、そのプログラムプログラム内で確保したメモリがどんどん増えていきます。
言い換えると、他のプログラムが使用できるメモリがどんどん減ることになります。

では、Javascriptではどのようにメモリ管理が行われるでしょうか?
答えは、メモリが不要になった時に自動的に解放してくれます。このプロセスが、ガベージコレクション(GC)と呼んでいます。

しかしプログラムの書き方によっては、確保したメモリがGCによって開放されずにメモリが肥大化し、内部処理を圧迫していくことになります。

ガベージコレクション(GC)

Javascriptは2つのデータを持ってます。
① プリミティブ型
② 参照型

・プリミティブ型(string, int, boolean)は気にしなくても自動的にメモリを解放されます。
・参照型(ojbect, array)は自動的に解放されないケースがありますので、注意が必要です。

ガベージコレクションが実行するたびに、プログラム全体が中断されるため、ガベージコレクションの頻度が高くなると、
パフォーマンスに影響を与える可能性がある。

ガベージコレクションは2つの主要なアルゴリズムを使用して、不要な参照と達成不能コード、参照カウントとマークアンドスイープを検索します。

参照カウント

・参照のないオブジェクトを探します。
・オブジェクトを指す参照がゼロの場合は、オブジェクトを解放できる。
image.png
変数userはオブジェクト{name: “Alex”}を参照してます。
image.png
user = nullをセットすると、参照がなくなる。
オブジェクト Alex は到達不能になりました。ガベージコレクタはデータを捨て、メモリを解放します。

2つの参照

image.png
userの参照をadminにコピーします。
image.png
user = nullをセットしても、オブジェクトはadmin経由で達成可能なため、解放できない。
admin = nullをセットしたら、オブジェクトが達成不能になり、解放できるようになります。

循環参照

image.png
person, employee = nullをセットしても、
循環参照を持っているため、これらのオブジェクトを解放できない

image.png

サマリ

・ガベージコレクションは自動で実行される。実行を制御したり、防ぐことができない
・オブジェクトは達成可能な場合はメモリ上に保持される
・オブジェクトへの参照がなくなった場合は、自動的にメモリを解放される

あとがき

最後までご覧いただきありがとうございました。
エアークローゼット Advent Calendar 2022はまだ続きますので、興味あれば、ぜひ他のエンジニア、PMの記事もご覧いただければと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?