-XXによってDirectMemory容量:DirectByteBufferメモリメモリオーバーフローを割り当てる使用すると、例外がスローされますが、例外がスローされたとき、それは本当に、オペレーティング・システムの割り当てには適用されませんがMaxDirectMemorySizeは、指定されていない場合、デフォルトは最大Javaヒープと同じであり、指定メモリが、メモリを手動次いで、その演算によって割り当てることができない例外をスローし、実際のアプリケーションでは、(メモリアプローチはunsafe.allocateMemoryで割り当て)
ここで、テストコードです。
public class DirectMemoryOOM{
private static final int_1MB = 1024 * 1024;
public static void main(String[] args) throws Exception{
Field unsafeField = Unsafe.class.getDeclaredFields()[0];
unsafeField.setAccessible(true);
Unsafe unsafe = (Unsafe) unsafeField.get(null);
while(true){
unsafe.allocateMemory(_1MB);
}
}
}
実行時エラー:
Excepiton in thead "main" java.lang.OutOfMemoryError