我读过一些关于一些 64 位 Java VM 实现中的压缩对象指针的内容。据我了解,其原理是将引用存储为从一个对象到另一个对象的相对 32 位地址偏移量,而不是完整的 64 位指针,以获取内存。
我认为这种优化目前还没有应用于.NET CLR。至少我找不到任何相关内容。它是否可能适用于它,或者由于 CLR 内部的工作方式而成为不可能/无用/性能下降的优化?
CLR 目前不使用压缩指针。 CLR 中的收益可能不如 Java 中那么多,因为 .NET 很大程度上依赖于结构来保持较低的分配。
.NET 与本机代码有很多接口,并且 4 字节或 8 字节对齐指针的冗余位可用于在其他状态标志中标记固定对象(请注意,目前尚未像这样实现 - 可能因为这是实现兼容性的噩梦)。
虽然我不确定在.NET中是否可以做这样的事情,但64位机器通常具有丰富的内存(一般为4或8G),因此节省几个4字节不会有太大效果。我将其归类为“不是很有用”。
快速谷歌并没有向我展示任何.NET能够支持的迹象(甚至对指针压缩/ORA有任何兴趣)。