我正在尝试实现类似缓存的对象集合.目的是通过内存中的位置快速访问这些对象,因为我可能一次只能读取多个对象.我目前只是将对象存储在像vector或deque这样的java集合对象中.但我不相信这会利用连续的记忆.
我知道这可以在C中完成,但可以用Java完成吗?这些对象可能具有不同的长度(因为它们可能包含字符串).有没有办法通过Java分配连续的内存?是否有Java集合对象?
请告诉我.
谢谢,jbu
你不能强迫它.如果快速连续分配所有对象,它们可能是连续的 - 但如果将它们存储在集合中,则无法保证集合将是实际值的本地集合.(该集合将引用对象,而不是包含对象本身.)
此外,GC压缩将在内存中移动值.
你有没有真实地描述你的应用程序,发现这是一个瓶颈?在大多数情况下,我希望其他优化措施能够以更可靠的方式帮助您.
不,你不能保证这个地方的参考.
通过分配字节数组或使用包中的映射字节缓冲区nio
,您可以获得一块连续的内存,从中可以解码所需的数据(从这块内存中有效地反序列化感兴趣的对象).但是,如果您反复访问相同的对象,反序列化开销可能会失败.