首页 > 解决方案 > 对 Java 对象的引用真正存在于哪里?

问题描述

对 Java 对象的引用实际存在于哪里?(比如垃圾回收)</p>

垃圾收集期间不会回收强引用。该hprof文件似乎记录了对象之间的连接。它们存在于 JVM 中的什么位置?我猜也有维护它的代码?它与对象标头有什么关系吗?

void setView(View view) {
    // This is a “reference” to the view
    this.view = view;
}

问题:

  1. 实际的参考资料在哪里?
  2. 如果不是,hprof文件是从哪里来的?</li>

标签: javaandroidjvmhprof

解决方案


对 Java 对象的引用实际存在于哪里?

在记忆中。要么在堆中,要么在线程堆栈上,或者(在某些情况下)在 JVM 知道的其他位置。永远在记忆中。

垃圾收集期间不会回收强引用。

呃......不知道你在这里真正说的是什么。GC 不会回收引用,因为它们总是作为其他东西的一部分保存。

hprof 文件似乎记录了对象之间的连接。

确实如此。

它们存在于 JVM 中的什么位置。

连接是参考。如果对象在其实例变量之一中a有对对象的引用,则将在 hprof 文件中显示为“已连接” 。bab

但请注意,hprof 文件是一个文件。它不是记忆。它是由 JVM 检查其所有活动内存位置并生成对象的快照而生成的。

我猜也有维护它的代码?

有创建 hprof 文件的代码。它是 JVM 的一部分。

它与对象标头有什么关系吗?

好吧。生成 hprof 文件的代码理解对象标头。

实际的参考资料在哪里?

在记忆中; 看上面。

如果不是,hprof文件是从哪里来的?</p>

hprof 文件由 JVM 或与 JVM 对话的工具编写。(我不是 100% 确定哪个,但这并不重要。)


推荐阅读