2017年5月31日水曜日

JavaScriptでメモリーリークを調査する

ちょっとした経緯で、JavaScriptにおけるメモリーリークを調べることとなりました。
C言語だとメモリーリークは分りやすいですが、JavaとかC#になるとガベージ・コレクションになるので、本来的にはメモリー管理から開放されるはずですが、そうでもないようです。
また、JavaとJavaScriptでも少し、ポイントが違いそうです。

ちょっとググってみて、こちらに当りました。
4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them

JavaScriptだと、変数定義しなくても使えてしまいますが、そのあたりで、グローバルスコープになったりするようです。関数定義した場合も、うっかりで発生しがち。
GCなのにメモリーリークが発生する経緯にも触れられており、ポイントも4つに絞っているので、最初に読むには良い感じです。

AngularJSに特化していますが、次の記事も秀逸です。
Fixing Memory Leaks in AngularJS and other JavaScript Applications

jQuery含めた、他のライブラリーとの共用によるメモリーリーク発生のメカニズム等、こちらも分りやすく書かれています。デバッグ手法にも触れられており、参考になります。


こちらもケースが限られていますが、サーバーとの同期に関するメモリーリークがこちら。
Simple Server Polling in AngularJS Done Right

サーバーからのデータロードに失敗した場合のハンドリングを正しくしないと、メモリーリークが発生するという話です。


JavaScriptは手軽にコーディングでき、サードパーティーのライブラリーも充実しているだけに、C言語よりも遥かに問題特定に時間がかかる印象を受けました。
そう言えば、V4あたりのVisual Basicも、結局はSet XX = Nothingとしないとメモリー開放されなかったり、C言語の動きを理解していないといけなかったのを思い出しました。
プログラミングも、楽になったようで、環境が複雑になった分、いろいろと別の課題が出てきているようです。


具体的な デバッグはこれからですが、備忘録がてら、書いておきます。

0 件のコメント:

コメントを投稿