やりたいこと
GC が物事を動かさないようにするには、ダイレクト メモリを使用する必要があります。それらのために巨大なページを有効にしたいと思います。
ここのところ
フラグ -XX:+UseLargePages は、ヒープ バッファー (非直接 ByteBuffers) を使用する場合は正常に機能しますが、DirectByteBuffers を使用する場合は機能しなくなりました。MappedByteBuffers と hugetlbfs ファイルシステムも使用してみました。これは機能しますが、いくつかの問題が発生するため、別の解決策を探しています。
CentOS リリース 6.3、ホットスポット、jdk1.7 の構成
[編集]
hotspot のソース コードを見ると、malloc を使用して Unsafe でメモリを割り当てていますが、巨大なページを使用するには shmat/shmget または mmap が必要でした。
[編集] 非ヒープメモリの理由
私たちは、メモリ内データベースの NUMA コンテキストにあり、多くの長期間有効なオブジェクトがあります。UseNUMA フラグがオンの場合、JVM は古い世代を分割しません。ダイレクト メモリを使用すると、メモリを必要とするスレッドの近くにメモリを保持できます。
DirectByteBuffers を使用する決定には、明らかにベンチマークが大きな役割を果たしました。DirectByteBufferを使用する必要があるかどうかを尋ねているのではなく、質問に対する答えを探しています。