我想研究 Java 程序的内存访问模式。是否有一个框架或方法可以实现这一目标。
假设有一个程序 P,它按顺序访问内存地址 m1、m2、m3 等。我希望能够按该顺序查看这些访问,如果可能的话,访问的是什么类型的对象?
更新(添加到 Durandal 的建议):
我总是可以通过运行带有 PIN 检测的 Java 程序来找到内存访问模式。除了这样做之外,这一切都很好,我将丢失内存地址到对象的映射。我想做的研究的一个重要方面是能够将内存使用情况映射到相应的类型(类)。
尽管正确地提到内存使用模式将取决于 JVM 实现,但我想将其视为研究的后续步骤。现在,我只在寻找字节码检测。(如果我走错了方向,请纠正我!)
我认为字节码检测将如何帮助我分析缓存使用情况? 在任何解释之前!这只是我想做的一方面。当内存访问模式(从 PIN 或修改后的 VM 或其他)不足以为我提供有关不同对象(或属于特定类的对象)使用缓存的信息时,我会这样做. 假设我得到字节码访问为
ObjectA
ObjectB
ObjectC
...
很容易找到物体的大小。我还可以通过这是对对象的第一次访问来确定对象的内存访问是否是内存分配。然后,假设 JVM 在运行时会分配连续的内存,我可以对缓存的使用情况做一个假设(通过运行缓存模拟)。现在,这不是一个很好的假设,但仍然给了我缓存使用的上限(至少我相信如此)。