木曜日の Bay Area Clojure Meetup でのプレゼンテーションのために、Clojure でメモリをリークする方法のリストを作成しています。
これまでのところ、私は持っています:
- 無限列の頭をつかむ
- ループで lambda を呼び出すことにより、多くのジェネリック クラスを作成します (これはまだ問題ですか)。
- 未使用データへの参照を保持する
- ...
ほかに何か?
木曜日の Bay Area Clojure Meetup でのプレゼンテーションのために、Clojure でメモリをリークする方法のリストを作成しています。
これまでのところ、私は持っています:
ほかに何か?
大規模なコレクションの seq への参照を保持することによって。例えば:
(drop 999990 (vec (range 1000000)))
ベクトル全体への参照を保持する 10 個の要素のシーケンスを返します!
インターン募集もあります。
あなたの例は、常識的な意味でメモリをリークしていないことに注意してください。オブジェクトには引き続きアクセスできます (クラスについてはわかりません。何らかの API を介してオブジェクトを再検索できると思います)。つまり、オブジェクトは失われていません。クラスやインターンされた文字列などの特定のものでは、データを忘れることは不可能であるため、効果は同じです。
Clojureのメモリリークは通常、Javaのメモリリークと非常によく似ています。ただし、コレクションが「永続的」であるという事実は、コレクションに何かを追加し、古いバージョンのコレクションへの参照と新しい値を保持していることに気付かない場合、古いバージョンを維持するためにメモリが消費されることを意味しますぶらぶらしているバージョン。