4

木曜日の Bay Area Clojure Meetup でのプレゼンテーションのために、Clojure でメモリをリークする方法のリストを作成しています。

これまでのところ、私は持っています:

  • 無限列の頭をつかむ
  • ループで lambda を呼び出すことにより、多くのジェネリック クラスを作成します (これはまだ問題ですか)。
  • 未使用データへの参照を保持する
  • ...

ほかに何か?

4

4 に答える 4

11

大規模なコレクションの seq への参照を保持することによって。例えば:

(drop 999990 (vec (range 1000000))) 

ベクトル全体への参照を保持する 10 個の要素のシーケンスを返します!

于 2009-04-29T09:39:37.320 に答える
3

もう 1 つの明白な方法は、メモリをリークする Java ライブラリを使用することです。(例: Qt Jambi )

ラムダについては、こちらこちらこちらをお読みください。これは Clojure の最新バージョンでは修正されていると思います。

于 2009-04-15T01:09:52.730 に答える
2

インターン募集もあります。

あなたの例は、常識的な意味でメモリをリークしていないことに注意してください。オブジェクトには引き続きアクセスできます (クラスについてはわかりません。何らかの API を介してオブジェクトを再検索できると思います)。つまり、オブジェクトは失われていません。クラスやインターンされた文字列などの特定のものでは、データを忘れることは不可能であるため、効果は同じです。

于 2009-04-20T15:38:30.617 に答える
0

Clojureのメモリリークは通常、Javaのメモリリークと非常によく似ています。ただし、コレクションが「永続的」であるという事実は、コレクションに何かを追加し、古いバージョンのコレクションへの参照と新しい値を保持していることに気付かない場合、古いバージョンを維持するためにメモリが消費されることを意味しますぶらぶらしているバージョン。

于 2009-04-25T04:39:49.787 に答える