私は自分で作成したユーティリティを持っています。非常に小さな専用ユーティリティであるため、テスト中に 150 MB のメモリを使用していることに気付いたときは非常に驚きました。1MB のヒープ設定で実行しましたが、それでも 50MB 以上を占めていました。
プロファイリングを行い、どこが間違っていたのかを突き止めるために 1 日を費やした後、理論をテストすることにしました。私のユーティリティは独自のアプリケーションに接続します。この接続には、アプリケーション ベンダーが提供する外部ライブラリが必要です。
ライブラリを使用して小さな Hello World を書き、次のことに気付きました。
1) ベンダー ライブラリから新しいオブジェクトを宣言すると、すぐにメモリ使用量が 50MB (ほとんど permgen スペース) に増加します。
2) 実際にアプリケーション サーバーに接続しようとすると、メモリ使用量が 150MB に跳ね上がります。
私に関する限り、それはただのばかげたことです。
獣を手なずける方法が何かあるのだろうかと思っています。たぶん、必要のない、または参照されることのないことがわかっているクラスを何らかの形でアンロードします。ベンダーはすぐに物事を変えるつもりはありません。
または、必要な場合にのみベンダーのライブラリをロードするのはどうでしょうか? そうすれば、アプリサーバーとの通信中にメモリを消費するだけです。