
[英]JProfiler : After Garbage Collector collects the object. If any Live object is there on heap, is it Memory Leak?
[英]How heap memory scan (or object graph traversal) works in garbage collector?
我最近开始研究 Java 等语言中使用的垃圾收集器 (GC)。其中,我对跟踪(或标记并清除)G1(垃圾优先)等 GC 特别感兴趣。 在阅读了一些文章和 wiki 之后,我想我现在有了一个高层次的观点。
但是,我仍然对在标记阶段执行以标记可达对象的对象图遍历中的一些细节感到困惑。
根据我的理解,从根开始,G1 GC 扫描访问过的 object 的堆 memory 并找到引用变量(存储在其区域中)以找到其他要访问的对象(而不是在运行时维护实际的 object 图并遍历它)。
关于堆 memory 扫描,谁能解释一下 G1 GC 如何确定object 中的哪个 memory 位置存储引用变量?
例如,给定一个 object A,它可以包含 N 个参考变量作为 class 个成员。 对于object A,GC如何知道那里有多少个引用变量以及它们存储在哪个偏移量......?
我知道使用记忆集、卡片表等的技术。但是,根据我的理解,这些都是为了优化。 我特别好奇memory扫描的方式。
此外,请不要说“GC 存储一些元数据来计算这些信息”。 如果可能的话,我希望听到实际(或详细)的实现。
提前谢谢大家,祝你新年快乐!
object A的class的定义指定了哪些字段是引用。 (并且 object A 在一个始终可预测的位置包含 object header 对其保存该信息的 class 的引用。)这就是全部答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.