最近、クラスを書いていて、インスタンスのメモリ消費量を要素あたり約 10 バイト削減できることを発見しましたが、コードがはるかに複雑になるという代償が伴います。これにより、コンパイルされた.class
ファイルのサイズが最大 10KB 増加しました。
JVM はファイルをメモリにロードする必要があると想定している.class
ため、少なくとも 1000 個の要素が存在しない限り、これらの変更は元に戻りません。しかし、クラス ファイル内の余分な 10 KBがコードの複雑さの増加による唯一のコストでない限り、その計算はうまくいきません。
この Oracle ブログ.class
は、ファイルに基づいているだけでなく、permgen のクラスによってかなりの量の余分なメモリが消費されていることを示唆しています。
したがって、この質問には 2 つの部分があります。
- 特定のクラスの実際の permgen メモリ消費量を測定するにはどうすればよいですか? 実行時にインストルメンテーションを使用するか、プロファイリング ツールを使用しますか?
- クラスを書いているときに、クラスの permgen メモリ消費量を見積もる方法はありますか? (いくつかの背景知識があれば、クラス インスタンスを作成する際に、クラス インスタンスのメモリ消費量を見積もることができます。クラス自体の permgen メモリ消費量を見積もることができるかどうか疑問に思っています。)
Dalvik VM についても同様の詳細を教えていただければ幸いですが、私は主に OpenJDK とその他の「主流」の JVM に焦点を当てています。