アプリケーションが割り当てられたメモリの一部を解放することを強制できますか?

アプリケーションが割り当てられたメモリの一部を解放することを強制できますか?

約1年前にFirefoxを再起動して以来、同じ問題に直面してきました。ブラウザがメモリを使い続けているからです。問題の根本的な原因は、ユーザーがタブを閉じると、ブラウザがタブに割り当てられているメモリを解放することです(おそらく間違った仮定)。もちろん、Firefoxは他の多くのブラウザと同様にバックグラウンドでいくつかのキャッシュを実行します。最近閉じたタブを再度開くのもこれに関連しているようです。したがって、メモリは、ユーザーが望むほど早く解放されません。

Mozillaを含む多くのフォーラムで、Firefoxが現在必要とされていない割り当てられたメモリが他のプロセスに必要な場合、オペレーティングシステム(私の場合はDebian Jessie)がブラウザからいくつかのメモリを取り出して他のプロセスに提供することを読んでいます。 。はい、これは実際に起こるはずですが、そうではありません。 Firefoxは常時常駐メモリを消費し、メモリが枯渇すると(3.8 GBのうち約3.6 GB)、交換が始まります。これらすべては非常に痛みを伴うブラウジングの経験をもたらします。タブを閉じても何の利点もありません。 Firefoxを閉じても割り当てられたメモリはかなり長い間残ります。

私はプロセスが使用していましたが(対応するメモリを必要とする他のプロセスがない場合でも)、現在シャットダウンされているすべてのメモリ(スワップを含む)をOSが強制的に再割り当てできるかどうか疑問に思います。

編集する:

ここで必要なのは、Firefoxが閉じる前と後の呼び出しの結果ですfree(読みやすくするためにパラメータが使用されます)。-h

今後:

               total       used       free         shared       buffers        cached

Mem:           3.7G        3.6G       134M         6.8M         5.0M           166M

+/- buffers/cache:         3.4G       306M

Swap           3.7G        2.8G       916M

後ろに:

               total       used       free         shared       buffers        cached

Mem:           3.7G        2.9G       856M         4.8M         12.0M          179M

+/- buffers/cache:         2.7G       1.0G

Swap           3.7G        2.7G       998M

ご覧のとおり、わずかな劣化が目立つように見えますが、ブラウザを閉じてから20〜30分間のメモリ使用量(常駐および交換)に比べて何もありません。 Firefox以外には、一般的なDebianプロセスと多くのメモリを必要としないいくつかのパネルアプレット(天気、CPU + HDD +メモリ監視、ネットワーク監視など)を除いて、他のプログラムを起動しません。私はその価値にほとんど気づいていませんhtop。基本的に私がすることは、ブラウザを終日開いたままにしてタブを閉じたり開くことです。私のセッションにはたくさんのタブがあることを認めなければなりませんが、最初(そしてそれ以降)にはそれらのうちのほんのいくつかだけをロードします。私の考えでは、ロードされたコンテンツがない場合でもタブが多いメモリを占有できるようです。ただし、ブラウザを閉じた後にメモリクォータが高すぎる理由は説明されていません。実際に高すぎてシステムを正しくシャットダウンできず、コールドシャットダウンをしなければならなかった時もありました。

ベストアンサー1

つまり、答えは「いいえ」です。アプリケーションがメモリを割り当てて使用すると、そのメモリはアプリケーションに「属し」、アプリケーションがメモリを解放しない限り、他のものはそれを取り戻すことができません。 (これはfree()システムではなく個々のアプリケーションのプールにメモリを返すため、whileを呼び出すのと同じくらい簡単ではありません。)

スワッピングはこの問題を解決するのに役立ちます。物理メモリがいっぱいになると、オペレーティングシステムは、ほとんど使用されないメモリページをスワップするために移動できます。物理ワークセットが物理メモリより大きい場合、システムの競合が発生する可能性があります。メモリは常にスワップ領域の周りに移動し、後方に移動し、システムは便利な操作を実行できません。

Linuxでは、最後の手段としてOOMキラーが介入し、プロセスを終了してメモリを回収します。

奇妙なことに、Firefoxが停止するとメモリが復元されるのを見ることはできません。おそらく、ウィンドウが消えた後にFirefoxプロセスが実際に終了するのに時間がかかるかもしれません(タスクpsマネージャを確認してください)。プロセスが停止すると、割り当てられているすべてのメモリが解放され、他のプロセスで使用できるようになります。

おすすめ記事