gpt4 book ai didi

java - 从 C 读取和解释 JVM 内存

转载 作者:行者123 更新时间:2023-11-30 16:58:03 24 4
gpt4 key购买 nike

所以我试图从 C 代码读取 Java 进程的内存。我找到了有关 JVM 结构(堆、永久代、方法区等)的文档,但这些文章都没有真正展示如何查找这些区域在内存中的位置。

据我了解,类存储在方法区中,堆中前 32 位的所有实例都有一个指向这些类的指针(我指的是 x86 JVM)。我尝试过 JDK 中提供的 jmap 和 jhat 实用程序,希望能够找到内存位置的“模式”,但未能成功,因为它们只显示实例的内存位置。 ClassLoader 不提供任何指向类和静态字段的指针,但我通过在 java 程序中应用反射并查看引用的 找到了 Class 对象的一些内存位置>Class 对象内存位置。必须有某种方法来确定这些东西的存储位置,否则 Java 进程也不知道如何获取它们。

任何人都可以提供一些有关如何在内存中查找实例、类、静态字段的见解或为我指明正确的方向吗?

我知道可以通过 Java 代码实现,但我需要用 C 语言实现。使用 JNI 或修改 Java 程序也是 Not Acceptable ,因为我需要完全用 native 代码编写它。

最佳答案

HotSpot Serviceability Agent可以做到这一点。它知道如何从外部 Java 进程的内存或核心转储中重建 JVM 结构。

可维护性代理有 Java API位于{JDK}/lib/sa-jdi.jar。用 C 语言实现类似的功能是可行的,尽管需要付出很大的努力。
不管怎样,你可以看看SA来源here .

关于java - 从 C 读取和解释 JVM 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com