1

私の質問はJava-Native-Code-Background に強く関連しています:

Java からネイティブ メモリをうまく制御することはできません。ネイティブ バッファについて聞いたことがあるかもしれませんが、Java はネイティブ バッファを適切にガベージしないということを彼らが教えてくれませんでした。問題は、Java がネイティブ バッファのサイズを考慮に入れていないことです。つまり、ある時点でネイティブ バッファを解放しますが、それらが非常に多い場合は、おそらく使い果たす前には解放されないでしょう。メモリの。これは、すべてのデータを Java オブジェクトに格納する必要があることを意味します。

したがって、GC を実行する必要があることを JVM に伝えるために使用されるネイティブ メモリの量を何らかの方法で通知または登録することは可能ですか? 私がそれを正しく理解していれば、Dalvik はこれを行いますが、すべての JVM でこれを行うための信頼できる方法があると便利です。

ありがとう!

4

1 に答える 1

2

ネイティブ メモリの使用量を JVM に伝えることはできません。JVM には、そのためのインターフェイスがありません。しかし、JVM が使用量に気付かなかったためにメモリ不足になりたくない場合は、次の 2 つの方法が考えられます。

  1. java.lang.System.gc()JVMがすべきだと思うときはいつでも、強制的にGCを実行してください。私より頭のいい人たちが提案しています。GC は JVM のパフォーマンスに大きな影響を与えることを忘れないでください。
  2. アプリケーションのピーク時の総使用量に十分な 1 つの大きなダイレクト バッファを割り当て、それを永続化し、独自のメモリ管理を行います。これは、ダイレクト バッファの de/alloc コストが高いという理由で、NIO doc 自体によって提案されています。再利用してください。大きなバッファーのオフセットで部分的な ByteBuffers を読み書きします。
于 2012-10-07T19:46:41.617 に答える