ちょっとした経緯で、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 件のコメント:
コメントを投稿