当前位置: 首页 > 知识库问答 >
问题:

创建具有更大对象头的自定义JVM

陈项禹
2023-03-14

由于各种原因,我得出的结论是,创建一个自定义JVM构建可能是我所要实现的最简单的选择,因为如果不这样做的话,会有太多的事情会严重影响性能。

所以我启动了环境并运行,修改了一些简单的东西来生成一些我需要的回调,玩了一些内在的东西,到目前为止还不错。

不过,我想知道的是:这里的JVM专家如何看待创建一个具有更大对象头(例如8个字节以上)的自定义VM的可行性。markoop.hpp以一种非常好的方式解释了标记词的内容,以适应存在的不同风格(32bits、64bits、64bits和压缩的oops),我想知道扩展标题会有多难,这样我就可以在对象上添加一些额外的信息(没有标记不在选项上,请参阅我的文章)。

共有1个答案

闾丘山
2023-03-14

扩大对象头是绝对可能的(我以前见过这样的实验),尽管这不会像在OopDesc类中添加一个新字段那么容易。我相信JVM代码中有多个地方依赖对象头的大小,但应该不会太多。对象头的大小已经根据平台和useCompressedoops选项而有所不同,因此代码中的大多数地方已经使用了相对偏移量,不会受到新字段的影响。

另一种选择是不展开头,而是向java.lang.Object类添加一个新的假字段。HotSpot已经有了添加这些字段的机器,请在源中查找InjectedField。然而,这也不会是微不足道的。系统类有一些硬编码的偏移量,请参见javaclasses::check_offsets。这些也需要修复。

这两种方法在执行力度方面大致相同。在这两种情况下,我建议从JVM的debug(而不是fastdebug)构建开始,因为它们包含许多有用的断言,可以早期发现可能的偏移量问题。

 类似资料:
  • 我在创建包含自定义对象数组的数组时遇到了问题。 出于多种原因,我希望将容器创建为可比较数组的标准数组: 其中包含的每个自定义对象数组必须具有不同的长度 自定义对象数组内置了自动排序工具,这些工具不适合我希望它们适合的较大包含数组 自定义对象数组可以工作,并且已经过彻底测试。 我在创建较大对象时收到的例外情况是: 线程“main”中出现异常java.lang.ClassCastException:

  • 我有一个要求,我需要根据2个条件从另一个列表中创建一个对象列表。对象应处于会话中或处于活动状态。[这个问题与使用java8流从另一个对象创建对象列表有着模糊的联系 主要类别: 任何帮助都将不胜感激。

  • 我们可以创建一个新的自定义PDF运算符(如PDF运算符{BDC})和COSBase对象(如COSName{P}COSName{Prop1}(Prop1将再次引用一个obj))吗?并将这些添加到pdf的根结构中? 我从现有的pdf文档中阅读了一些解析器标记列表。我想标记pdf。在这个过程中,我将首先使用新创建的COSBase对象操作标记列表。最后我将它们添加到根树结构中。所以在这里我如何创建一个CO

  • 我有一个简单的触发器,当我的自定义对象上的SD_Action__c字段为某个值时,它应该会创建一个新机会。代码没有错误,但是当我尝试在沙盒或生产中更新字段时不会发生任何事情。当时,我错过了什么来使这个机会变得伟大? 这是我的测试课:

  • 问题内容: 我正在尝试将下拉框小部件转换为意见箱,因为当前的下拉菜单有100多个选择。看来您只能将String建议添加到ModifyOracle。我需要能够添加一个既包含描述又包含与记录匹配的ID的自定义对象到数据库。我是否必须扩展RecommendationOracle类? 问题答案: 是的,因为我知道您不能使用一对值,即Id和Value。您必须在建议框中添加您的字符串,也许您可​​以使用除建议

  • 我试图用Vuejs 2实现自定义选择组件。如文档中所述,我不应该直接修改值属性,并建议使用事件将选定的数据传递给父组件。当选项值是一个对象时,我遇到了问题,却得到了[Object object]。 这是我的选择组件模板: 这是脚本部分: 这是父组件 选项: 我期待 但得到了[Object object] 我错过了什么吗?