OpenJDK:修改 Java 堆管理

OpenJDK: Modifying Java Heap Management

我正在做的项目是关于修改 OpenJdk 堆管理和垃圾收集系统。目前我主要关心的是在创建新对象时找到负责在堆中分配 space 的代码段。

我想知道是否有 Java 专家可以告诉我从哪里开始搜索。

非常感谢您的任何反馈。

方法 InstanceKlass::allocate_instance 可能是您研究的一个很好的切入点。它正在调用 CollectedHeap::obj_allocate.

http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/87ee5ee27509/src/share/vm/oops/instanceKlass.cpp#l1096

这还取决于您要检测哪个垃圾收集器。我最近在 garbage first (G1) GC 上工作,主要 class 位于 /share/vm/gc_implementation/g1/g1CollectedHeap.

您可能还想看看我们的研究项目 AntTracks,它包含一个定制的 JVM,它跟踪每个对象在 JVM 中的分配和移动,并将其记录到一个跟踪文件中,然后可以分析了。因此,我们还必须检测 GC 分配对象的每个位置。