Estoy desarrollando una solución que sea mucho más rápido, pero yo no recomendaría que lo utilice por el momento, ya que sólo una prueba de concepto En este punto.
http://vanillajava.blogspot.com/2011/09/new-contributors-to-hugecollections.html
Sin embargo, si usted tiene un requisito específico, puede ser más fácil de codificar por sí mismo, para usar ByteBuffers directos o archivos de memoria asignada.
p. Ej.
// 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();
Puede hacer lo mismo para los archivos de memoria mapeados. Los archivos mapeados en memoria no cuentan para el límite directo de memoria y no usan espacio de intercambio ascendente.
¿Estás seguro de que BigMemory no hará el trabajo por ti?
La propuesta ha sido aceptada. DirectMemory está en la [incubadora Apache] (http://incubator.apache.org/directmemory/). – javanna
Ese proyecto no tuvo una vida larga y ahora ha sido retirado. –