2

現在、Android用の画像処理コードを実装しています。私はメモリ制限を認識しており、その制限内でコーディングできてうれしいです。ただし、(ヒープ上で)インスタンス化する可能性のある特定のクラスの各インスタンスに使用されているバイト数を把握できるドキュメントが見つかりません。

私は経験豊富なC++プログラマーなので、C ++コードの構造体/クラスのサイズ設定の問題(プロセッサのデータパス幅、プラットフォームの配置の問題などを考慮に入れる)を解決するのに比較的有能です。Javaは一般的に抽象化のレベルが高いため、一般的なJavaVMの特定のメモリ使用量を保証できない可能性があることを私は知っています。ただし、Androidが別のVMで実行されており、開発者がメモリに強い制約を受けていることを考えると、特定のオブジェクトインスタンスの大きさを計算するための比較的決定論的な一連のルールが存在する可能性があると想定しています。メンバー。

誰もがこれらのルールを知っていますか?

ありがとう!

アレックス

4

2 に答える 2

2

Dalvikvmのメモリオーバーヘッドは、HotSpotを含む他の主流の32ビットVMと一致しています。

dalvikvm内のすべてのオブジェクトの基本オーバーヘッドは、2つの32ビットワードです。これに、longまたはdoubleフィールドごとに2つの単語を追加し、他のフィールドごとに1つの単語を追加します。静的フィールドは、この合計にはカウントされません。

オーバーライドされていないObject.hashCode()またはSystem.identityHashCode()のいずれかを呼び出してID hashCodeを実行すると、追加のオーバーヘッドが発生する可能性があります。

また、オブジェクトで同期すると、追加のメモリオーバーヘッドが発生します。

于 2010-08-10T17:03:04.003 に答える
0

ジェシーが指摘したように、レイアウトはHotSpotVMと非常によく似ています。32ビットホットスポットのルールはここにあります:http: //kohlerm.blogspot.com/2008/12/how-much-memory-is-used-by-my-java.html

于 2010-08-19T08:00:37.153 に答える