Я разрабатываю решение, которое будет намного быстрее, но я бы не советовал вам его использовать, поскольку это просто доказательство концепции на данном этапе.
http://vanillajava.blogspot.com/2011/09/new-contributors-to-hugecollections.html
Однако, если у вас есть конкретное требование, может быть проще написать его самостоятельно, использовать прямые байтовые буферы или файлы с отображением в памяти.
например,
// using native order speeds access for values longer than a byte.
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024*1024).order(ByteOrder.nativeOrder());
// start at some location.
bb.position(0);
bb.put((byte) 1);
bb.putInt(myInt);
bb.putDouble(myDouble);
// to read back.
bb.position(0);
byte b = bb.get();
int i = bb.getInt();
double d = bb.getDouble();
Вы можете сделать то же самое для файлов с отображением в памяти,Файлы, отображенные в память, не учитывают прямой лимит памяти и не занимают места подкачки.
Вы уверены, что BigMemory не выполнит эту работу за вас?