2012-01-25 5 views
18

Java 5ではInstrumentationがオブジェクトのサイズを簡単に取得できるようになりました。 AndroidとDalvikにそのような方法がありますか?AndroidとDalvik - オブジェクトのサイズを取得

java.lang.instrumentパッケージはAndroidではご利用いただけません。

+0

http://www.javapractices.com/topic/TopicAction.do?Id=83 – slayton

+0

見た目が悪いハックのように見えます...私はサムエルの答えに行ってきました。 –

+0

ちょうど好奇心が強い...それを必要とする実際のユースケースは何ですか? –

答えて

12

私はDalvik VMのソースコードを見てきましたが、オブジェクトのサイズを取得するための安定したAPIは見つかりませんでした。あなた自身を見たい場合は、オブジェクトのサイズはClassObject::objectSize : size_tに格納されます。dalvik/vm/oo/Object.hを参照してください。

オブジェクトのサイズを取得するには、内部のAPIがあります。オブジェクトサイズに関する詳細情報を報告するためにDDMSによって使用されます。しかし、APIは内部的なものであるため、Androidのさまざまなバージョン間で変更される可能性があります。さらに、APIはraw byte[]データを送信し、クライアント/サーバーベースであり、単純なライブラリ呼び出しではないため、使用するのが非常に面倒です。あなたが見てみたい場合は、dvmAllocObject()dalvik/vm/alloc/Alloc.cppdvmTrackAllocation()の呼び出しで開始してください。

Dalvik VMでオブジェクトのサイズを取得するために、残念ながら、すぐに使用できる安定したAPIはありません。

+0

大当たりを当てる、dvmAllocObject関数ですnew演算子が使用されたときに呼び出されます。サイズについては、それは本当のこと、アプリのユーザーは、サイズを得ることができます。 –

0

この問題では、プログラマチックなアプローチではなく、www.eclipse.org/mat/のMemory Analyzer Tool(MAT)を使用する方が良いでしょう。Eclipse用のスタンドアロン版とプラグインの両方があります。これで、Dalvikヒープのスナップショットを作成して、オブジェクトのサイズや、参照されるオブジェクトのサイズ(保持サイズ)によってオブジェクトのリストを並べ替えることができます。私はビットマップキャッシュリークのトラブルシューティングにこれを使用しました。

+0

彼は実行時に**オブジェクトのサイズを計算する方法を探しています**。 –

+1

私が提案した解決策は、実行時に正確に動作します。 – WindRider

-7
int length =processes.size(); 

は、オブジェクトのサイズを返します。

+1

**どのタイプが**プロセス**ですか?これはあまり役に立ちません。 –

+1

上記の質問に答えていない – milosmns

+1

あなたはプロセスがArrayListなのかと思っていますね。 –