- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我试图从 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/
为什么 pickle 重用现有的 Python 类“C”而不是从 pickle 字节重建类?有没有一种方法可以在没有副作用的情况下 pickle 和解 pickle ? 这是我的回复 session
我是一名优秀的程序员,十分优秀!