私は定期的にrm(list=ls())
への呼び出しを使用してRのメモリを掃除していますとの違いは何ですか。
は、私はその後、ガベージコレクタgc()
を呼び出す必要がありますか?GC()およびRM()
これら2つの機能の違いは何ですか? gc()
は、特定の変数に対してrm()
を呼び出しますか?
私は定期的にrm(list=ls())
への呼び出しを使用してRのメモリを掃除していますとの違いは何ですか。
は、私はその後、ガベージコレクタgc()
を呼び出す必要がありますか?GC()およびRM()
これら2つの機能の違いは何ですか? gc()
は、特定の変数に対してrm()
を呼び出しますか?
まず、それは、2つのことgc
に非常に異なっていることに注意することが重要なのは、あなたはまだそれが唯一のあなたは、もはやどうか(へのアクセス権を持っているもののためにメモリを解放しますusing-ある任意の変数は削除されません。 rm()
を使用して削除されました。たとえば、その後返された関数で作成されました)。 gc()
を実行すると、変数が失われることはありません。
に電話する必要があるかどうかの質問は、rm()
を呼び出した後には良いものです。 documentation gcの参考情報:
ガベージコレクションが発生する原因となります。これはユーザーの介入なしに自動的に行われ、gcを呼び出す主な目的はメモリー使用量に関する報告です。
しかし、大きな物体が除去された後、これはオペレーティングシステムにメモリを返すようにRを促すことができるように、GCを呼び出すために有用であり得ます。
だから、答えは、それはおそらく(すぐに、その後、すぐにそうでない場合は)とにかくトリガーされるにもかかわらず、gc()
を呼び出すために(そして非常に少なくとも、傷つけることはできません)良いことができますということです。
個人的に私はループが利用可能なスペースを埋める起動したときに、いくつかのRAMを解放するために、ループでgc()
を含めるのが好き。
for(i in 1:1000){
res[[i]] = some operation
gc()
}
gc()の呼び出しには、1回の呼び出しにつき100ms程度の非常に大きなパフォーマンスペナルティがあることに注意してください。したがって、この場合、コードは必要以上に約100秒長く実行されます。 – ThankGoat
のような何かがあなたの答えをいただき、ありがとうございます。一般に、Rの自動ガベージコレクションは良いと考えられていますか? (例えばJavaのものと同じくらい頑丈なもの) – RockScience
これは難しい質問ですが、わかりません。 [この質問](http://stackoverflow.com/questions/1467201/forcing-garbage-collection-to-run-in-r-with-the-gc-command)は便利です。 –
一般的に、gcを呼び出す必要はありません。そうした場合、大きな違いはありません。 – hadley