【问题标题】:Can we implement an XOR linked list in Java? [duplicate]我们可以在 Java 中实现 XOR 链表吗? [复制]
【发布时间】:2016-09-11 08:11:22
【问题描述】:

由于 Java 没有提供获取对象地址的方法,所以编写 XOR linked list 是否可行?

如果是,有人可以详细说明一下,如何做到这一点?

【问题讨论】:

标签: java linked-list xor-linkedlist


【解决方案1】:

在 Java 中你永远无法做到这一点。

即使您使用sun.misc.Unsafe 来访问对象的真实地址,并且即使您使用不会移动对象的垃圾收集器(我相信并发标记扫描不会移动对象,因为它是“非压缩的”),你有一个更大的问题:通过将 prevnext 对象引用组合成一个整数,垃圾收集器 不会意识到它们是对象引用。所以它会认为引用的对象是未引用的,因此会将所有列表节点作为垃圾收集。

如果需要节省内存,请使用基于数组的列表而不是链表。

【讨论】:

    【解决方案2】:

    我不相信你可以(至少,不要为你的“下一个”和“上一个”指针使用对象引用),因为你引用的原因:对象地址是官方不透明的。虽然我们可以访问引用的位,但 JVM 可以移动内存中的对象(例如,在进行内存管理时),尽管我没有立即找到规范引用它,我相信它可以通过修改对象引用值来处理它(字面意思是去和更新每个字段以及旧引用所在的位置,给它新的引用)。因此,如果我们将对象引用转换为long(例如),然后与另一个转换为long 的对象引用进行异或运算,如果任何一个对象移动(他们可以这样做),一旦其中任何一个是异或'd 返回并转换回对象引用,它可能不再有效。

    因此,我认为您需要对指针使用对象引用以外的其他内容,例如指向大型对象引用数组的索引,此时我相当确定您已经失去了异或链表。

    【讨论】:

      猜你喜欢
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2018-02-18
      • 2019-06-25
      • 2019-11-05
      • 2016-06-17
      相关资源
      最近更新 更多