【问题标题】:Pinning an object by modifying bits in mask word of object header通过修改对象头的掩码字中的位来固定对象
【发布时间】:2016-12-06 00:19:46
【问题描述】:

我想知道是否可以通过自己设置对象标头的标记字中的一位来防止对象被 GC 移动(试图欺骗 GC)。

所以基本上我想知道这种方式是否可以确保标记的对象始终具有相同的内存地址。

【问题讨论】:

  • directbytebuffers 位于堆外,因此保证它们的内存不会被移动
  • 没错,但问题不在于在堆外存储一些东西。我真的很想知道是否有办法(临时)防止物体被移动。
  • 好吧,带有非移动 GC 的 JVM 会自动产生这种行为。并且一些 JVM 可能会提供对象固定作为显式功能。热点没有。

标签: java garbage-collection jvm jvm-hotspot jol


【解决方案1】:

不,HotSpot JVM 不支持任何形式的对象固定,即使在 JVM 内部也是如此。

不要尝试修改对象头。否则JVM很有可能崩溃。标头的内容可能因 JVM 版本、参数和选择的 GC 算法而异。 JVM 对对象头有完全控制权,并且还没有准备好进行外部更改。

【讨论】:

  • 不好意思,但谢谢!您对这些主题(其他 OpenJDK 源代码)有什么好的阅读建议。类似于更新的“Java 虚拟机内部”之类的内容,还涵盖了对象标头的实际使用方式等细节?
  • @HaasipSatang 我不知道,抱歉。我相信源代码是最好的。顺便说一下,HotSpot JVM 源代码有很好的文档记录。您还可以查找有关 JVM 内部的会议演示文稿,例如 this one
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2021-09-28
  • 2023-03-14
  • 2012-05-12
相关资源
最近更新 更多