java - 对 Java 对象的引用真正存在于哪里?
问题描述
对 Java 对象的引用实际存在于哪里?(比如垃圾回收)</p>
垃圾收集期间不会回收强引用。该hprof
文件似乎记录了对象之间的连接。它们存在于 JVM 中的什么位置?我猜也有维护它的代码?它与对象标头有什么关系吗?
void setView(View view) {
// This is a “reference” to the view
this.view = view;
}
问题:
- 实际的参考资料在哪里?
- 如果不是,
hprof
文件是从哪里来的?</li>
解决方案
对 Java 对象的引用实际存在于哪里?
在记忆中。要么在堆中,要么在线程堆栈上,或者(在某些情况下)在 JVM 知道的其他位置。永远在记忆中。
垃圾收集期间不会回收强引用。
呃......不知道你在这里真正说的是什么。GC 不会回收引用,因为它们总是作为其他东西的一部分保存。
hprof 文件似乎记录了对象之间的连接。
确实如此。
它们存在于 JVM 中的什么位置。
连接是参考。如果对象在其实例变量之一中a
有对对象的引用,则将在 hprof 文件中显示为“已连接” 。b
a
b
但请注意,hprof 文件是一个文件。它不是记忆。它是由 JVM 检查其所有活动内存位置并生成对象的快照而生成的。
我猜也有维护它的代码?
有创建 hprof 文件的代码。它是 JVM 的一部分。
它与对象标头有什么关系吗?
好吧。生成 hprof 文件的代码理解对象标头。
实际的参考资料在哪里?
在记忆中; 看上面。
如果不是,hprof文件是从哪里来的?</p>
hprof 文件由 JVM 或与 JVM 对话的工具编写。(我不是 100% 确定哪个,但这并不重要。)
推荐阅读
- javascript - 具有动态数组长度的 React 钩子
- c++ - 无法理解如何在类中存储 log4cpp 记录器的实例
- fabricjs - FabricJS,如何在fabric js中实现触摸控制
- java - 通过 SocketChannel 读取(写入)的正确方法
- python - 数据框中的动态正则表达式
- c - 似乎无法将客户地址保存到 sourceMsgs[j]
- javascript - 如何使用 .net core 3.0 在 VS 2019 中创建的 react 应用程序支持 IE 11?
- python - 使用运行总计创建嵌套字典
- php - Ckeditor5 中的 CKFINDER 抛出错误
- python - 如何在 python 2.7 中将 n 个字节写入二进制文件