Zajmuję się tworzeniem rozwiązanie, aby być o wiele szybciej, ale nie proponuję użyć go jeszcze tak jak to tylko dowód koncepcji na tym etapie.
http://vanillajava.blogspot.com/2011/09/new-contributors-to-hugecollections.html
Jednak jeśli masz konkretne wymagania, może łatwiej będzie go zakodować sobie, aby korzystać bezpośrednie ByteBuffers lub pamięci mapowane pliki.
np.
// 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();
Możesz zrobić podobnie dla plików mapowanych w pamięci. Pliki mapowane w pamięci nie wliczają się do twojego bezpośredniego limitu pamięci i nie zużywają miejsca wymiany.
Czy jesteś pewien, że BigMemory nie wykona zadania za Ciebie?
Wniosek został przyjęty. DirectMemory znajduje się w [Inkubatorze Apache] (http://incubator.apache.org/directmemory/). – javanna
Ten projekt nie miał długiego życia i został wycofany. –