java - 对 Java 对象的引用真正存在于哪里?

标签 java android jvm hprof

对 Java 对象的引用实际存在于哪里? (如垃圾收集)

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

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

问题:
  • 实际的引用资料在哪里?
  • 如果没有,hprof 在哪里?文件来自哪里?
  • 最佳答案

    Where do references to Java objects actually exist?



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

    Strong references are not recycled during garbage collection.



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

    The hprof file appears to record the connections between objects.



    确实如此。

    Where do they exist in the JVM.



    连接是引用。如果对象 a引用了对象 b在其实例变量之一中,然后 a将显示为“已连接”到 b在 hprof 文件中。

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

    I guess there's code to maintain it, too?



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

    Does it have anything to do with object headers?



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

    Where do the actual references exist?



    在内存中;看上面。

    If not, where did the hprof file come from?



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

    关于java - 对 Java 对象的引用真正存在于哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704607/

    相关文章:

    java - 我可以设置Java VM可用的线程/CPU数量吗?

    java - 我可以使用 JVM SNMP 功能进行读写访问吗?

    java - Android 信号分析 + 一些过滤器

    android - 我如何在android中绘制一个矩形并在其中放置一些文本然后放置它?

    android - 选择 SDK 版本以达到最大人数

    android - 使用 ZXing 生成 GS1-128(以前称为 EAN-128)条码

    java - JGit稀疏 checkout 不断添加文件

    java - Spring Java Rest处理反序列化时的无效类型

    java - 对于 String 类型,方法 "nextLine()"未定义

    compiler-construction - 设计选择的理由会导致JVM/CLR语言长时间启动?