我们可以在Java中实现C ++样式列表吗?

时间:2013-08-12 22:14:21

标签: java collections unsafe memory-layout

Java中的arrayList“保存”对象的引用,而不是实际的Object数据。

我想知道我们是否可以在Java中实现一个可以直接包含Object数据而不是引用的arrayList。 Java Unsafe Class可以用于此实现吗?如果是,与现有Java arrayList相比,此列表的性能是什么?

1 个答案:

答案 0 :(得分:3)

简单地说,没有。

Java仅适用于对象的引用。您所描述的内容依赖于对内存分配/使用的低级控制,允许您为“ ”分配内存块。条目。 Java根本不会那样工作 - 你永远无法控制内存,JVM可以随意移动内存中的对象。您只有处理引用。

另请注意,包含引用的对象将引用更多不同的内存块,因此包含在一个连续内存块中的对象的概念在此处并不存在。

如果你真的想要一个由内存支持的字节数组,DirectByteBuffer可能是有用的。它是使用java.nio类构建的sun.misc.Unsafe类。也许您可以将对象序列化/反序列化(仔细计算大小以正确确定索引)。但是我怀疑,序列化成本会淹没任何其他储蓄。