いいえ、スレッドを再起動しても役に立ちません。
アプリケーションでメモリ リークが発生しているようです。
私の経験では、2 種類のメモリ リークがあります。
- アプリケーションの終了時に確認できる実際のメモリ リーク
- アプリケーションの存続期間中に増加するが、最後に正しくクリーンアップされる大きなリストのような「false」メモリ リーク
最初のタイプについては、終了時にアプリケーションによって解放されていないメモリを報告できるツールがあります。Solaris については知りませんが、Windows にはそれを実行できるツールが数多くあります。Unix の場合、Valgrind がこれを行うと思います。
2 番目のタイプについては、アプリケーションのメモリのスナップショットを作成できる Windows 用のツールもあります。数分または数時間 (アプリケーションによって異なります) の間隔で 2 つのスナップショットを作成し、ツールで比較します。おそらく、Solaris にはこのような類似のツールがあります。
これらのツールを使用すると、ツールはすべてのメモリ割り当てのコール スタックを保存する必要があるため、おそらくアプリケーションはより多くのメモリを使用する必要があります。このため、実行速度も大幅に低下します。ただし、この効果は、このツールを積極的に使用している場合にのみ表示されるため、実際の製品コードには影響しません。
したがって、Solaris でこの種のツールを探してください。私はすぐにそれをグーグルで検索し、次のリンクを見つけました: http://prefetch.net/blog/index.php/2006/02/19/finding-memory-leaks-on-solaris-systems/。これは出発点になる可能性があります。
編集:いくつかの追加情報: 正しい種類のメモリを見ていますか? 合計で 3GB しか割り当てていない場合でも、メモリの断片化により、仮想アドレス空間の合計が 4GB に達することがあります。残念ながら、これについてできることは何もありません (別のメモリ割り当て戦略を使用する以外は)。