1

場合によっては、アプリのヒープ メモリ制限をバイパスして、許容量を超えて使用する必要があります。

私は、バイトをネイティブ メモリ (ヒープ メモリではなく、管理されていないメモリ) に格納するキャッシュ メカニズムを含むソリューションを考えました。

もちろん、システムの最大利用可能サイズを考慮に入れます。

したがって、 direct buffersについて少し知っていたので、これを使用してバイト配列をネイティブ メモリに格納しました。

  final ByteBuffer nativeBytes=ByteBuffer.allocateDirect(bytes.length);
  nativeBytes.put(bytes);

ただし、Android では、これに使用されるメモリはネイティブ メモリではなくヒープで使用されるようです。

何が起こっている?ネイティブメモリからデータを保存およびロードするための簡単な代替手段はありますか?

4

1 に答える 1

0

NDK を使用してネイティブ ヒープにメモリを割り当て、JNI を使用して通信するものを実装できます。ネイティブ部分は C で実装され、malloc()呼び出しを使用してネイティブ ヒープにメモリを割り当てます。ただし、プロセスごとのヒープの最大値は引き続き適用されます。

ここに別の選択肢があります。独自のプロセスでネイティブ ヒープを使用しようとする代わりに、別のプロセスで dalvik ヒープを使用してください。

サービスを作成し、別のプロセスでサービスを実行します。サービスとアプリケーションの残りの部分との間でデータをやり取りできます。ヒープ制限はプロセスごとであるため、これにより、アプリケーションが使用できるメモリ量が事実上 2 倍になります。

もちろん、これは特定のケースでは役に立たないかもしれませんが、このオプションが利用可能であることを知っておくと便利です.

于 2012-09-04T21:45:29.183 に答える