试图将java对象存储在连续的内存中

jbu*_*jbu 8 java memory caching object

我正在尝试实现类似缓存的对象集合.目的是通过内存中的位置快速访问这些对象,因为我可能一次只能读取多个对象.我目前只是将对象存储在像vector或deque这样的java集合对象中.但我不相信这会利用连续的记忆.

我知道这可以在C中完成,但可以用Java完成吗?这些对象可能具有不同的长度(因为它们可能包含字符串).有没有办法通过Java分配连续的内存?是否有Java集合对象?

请告诉我.

谢谢,jbu

Jon*_*eet 14

你不能强迫它.如果快速连续分配所有对象,它们可能是连续的 - 但如果将它们存储在集合中,则无法保证集合将是实际值的本地集合.(该集合将引用对象,而不是包含对象本身.)

此外,GC压缩将在内存中移动值.

你有没有真实地描述你的应用程序,发现这是一个瓶颈?在大多数情况下,我希望其他优化措施能够以更可靠的方式帮助您.


eri*_*son 9

不,你不能保证这个地方的参考.

通过分配字节数组或使用包中的映射字节缓冲区nio,您可以获得一块连续的内存,从中可以解码所需的数据(从这块内存中有效地反序列化感兴趣的对象).但是,如果您反复访问相同的对象,反序列化开销可能会失败.

  • 数组是连续的——但是如果你有一个像 Foo[] 这样的数组,那意味着一个 Foo *references* 的数组,而不是 Foo *objects* 的数组。Java 没有用户定义的值类型。 (2认同)