私はArrayList<Obj>
を持っていて、どれだけのメモリを使用しているか知りたいです。JavaのArrayListのメモリサイズはどれですか
Obj
は変形されているので、オブジェクトのサイズごとに配列内の要素の数を掛けるほど簡単ではありません。
私はArrayList<Obj>
を持っていて、どれだけのメモリを使用しているか知りたいです。JavaのArrayListのメモリサイズはどれですか
Obj
は変形されているので、オブジェクトのサイズごとに配列内の要素の数を掛けるほど簡単ではありません。
Runtime.getRuntime().totalMemory()
とそれに対応するRuntime.getRuntime().freeMemory()
のようなものを使用して、推測される推測を得ることはできますが、呼び出し間でGCされたオブジェクトは考慮されません。
ありがとう。それは100%正確ではありませんが、実装が簡単です。 – magallanes
オブジェクトのコンテンツの分布を知っている場合は、それを強引に計算することができます。
しかし、私が考えることのできる最も正確な方法は、プロファイラで見ることです。そこには無料のツールがあり、JDKに付属のものもあります。しかし、私が使用したツールとして、Yourkitが最適です。それが唯一の解決策であるということではありません。
jmapが十分で無料です:) – bestsss
これは、java.util.ArrayListの容量に参照サイズ(4 bytes on 32bit, 8bytes on 64bit) + [Object header + one int and one references]
を掛けたものです。
容量がサイズより(always >=)
異なりますが、あなたは「日が同じようにしたい、ArrayList
は、それがデータを格納するObject[]
を持って話すtrimToSize()
技術を呼び出します。
これは、メモリプロファイラの目的です。あなたのプラットフォームを教えてくれるでしょう。空のArrayListの最小サイズは64バイトです。あなたが100K以上の要素を持っていない限り、これを知る必要はないでしょう。
ArrayListの仕組みは、単純に特定のサイズの配列(コンストラクタで指定することができますが、私は10がデフォルトであると思いますか?)を含んでいることです。要素の数が内部配列にとって大きすぎると、内部配列のサイズは2倍になります。したがって、オブジェクトのサイズに内部配列のサイズを掛ける必要があります。
私たちのプログラムのメモリ消費量を示すNetbeansのようなprofilerを使用しなければならない場合があり、各オブジェクトについていくつかの詳細を示すことができます。
答えは、測定方法によって異なります。あなたが私にArrayListのサイズを尋ねたなら、私はあなたに浅いサイズを与えます。つまり、ArrayListは、参照の配列と含まれる要素の数を示す整数で構成されます。あなたがサイズを知りたければ、それは非常に単純に4 + * array.lengthです。
ArrayListとそれに含まれるすべての要素のサイズを知りたい場合は、これを把握できるヒープ・アナライザーがいくつかあります。私はYourKitがその一つだと信じています。
Javaのメモリ使用量は、JVM実装によって異なります。私が知っているインスタンスのメモリ使用量を判断する唯一の実際の方法は、Java 5 instrumentationエージェントを使用することです。これを行うには少しtutorialがあります。
http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object –