【发布时间】:2017-10-02 09:39:18
【问题描述】:
我将被要求提出一种“自适应”类布局,即在我的情况下,可以将某些数组元素作为自己的字段内联或在运行时更改它们的大小。
我不知道该怎么做(还没有?),但让我们假设一下,我知道。
当我更改该类的字节码时,class A 的实例会发生什么情况?
具体来说,如何处理字段/方法偏移量?
例如,假设我向类中添加了一个字段...这会影响已创建的实例还是仅影响新创建的实例?
编辑:由于人们在询问细节,我的任务是
“在运行时对先前关于类布局修改的工作进行调查,并根据调查中获得的知识,为 [技术细节] 实施这样的类布局修改”
如果您对这些“技术细节”感兴趣,我会在
Synchronized-by-Default 框架,它使用 -atm - 一个固定大小的锁数组,每个锁由一个数值组成,其中最后一个 N 字节用作事务 ID。
由于使用锁数组减少了数据局部性,我们有兴趣确定一种启发式方法,它会告诉我们何时内联锁是有意义的 - 即,锁和它们对应的对象(希望)最终位于相同的缓存行。
此外,使用固定大小的 ID 会人为地限制在任何一个时间点可以同时处于活动状态的事务数量。所以我们希望能够按需“增长”它们。
我应该想出一个动态的类布局来支持两者,内联锁并根据需要增加它们。
【问题讨论】:
-
如何在不使(正在运行的)JVM 崩溃的情况下更改字节码?
-
@Stultuske 正如我所说,我不知道。我只是假设动态类布局需要手动重新排列类成员。
-
我建议不要这样做。请向我们解释你想用这个自适应类布局解决什么问题。很可能我们将能够提出一个不需要“黑魔法”的解决方案。
-
@RalfKleberhoff 查看编辑
-
我退出了游戏。这项任务需要深入了解整个堆栈,从 Java 同步到 HotSpot 编译器完成的优化,再到 CPU chaching 策略。
标签: java memory memory-management dynamic memory-model