java - 对象内对象的内存分配

标签 java performance object memory-management garbage-collection

据我了解,如果对象 A 将对象 B 的引用作为其实例变量,则该引用存储在堆上为对象 A 分配的空间内。但对象 B 本身存储在堆上的其他位置,位于为对象 A 分配的空间之外。

这种理解准确吗?以这种方式进行内存分配(与将对象 B 放在堆上的对象 A 中相比)有什么优点?

这对 Java 垃圾收集机制的性能有什么影响(正面或负面)(即,如果对象 A 被销毁)?

最佳答案

主要好处之一是对象的独立性 - 如果 B 是在 A 内分配的,则只有在收集 A 时才能收集 B。

作为堆上的单独对象,B 现在可以独立于 A 在其他地方传递和引用,并且 B 将拥有自己的生命周期。

垃圾收集器会知道何时没有对任一对象的进一步根引用 - 例如即使 A 被收集,仍然可能有其他对 B 的引用,这将延长其生命周期。

关于java - 对象内对象的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31614968/

相关文章:

java - Android 6.0 发布时应用程序崩溃,包括 Logcat,新开发人员

javascript - 如何使用特定键 Deep 键将所有值从 JSON 对象放入数组

java - 将所有 recyclerview 项目从 Activity1 传递到 Activity2 recyclerview 项目

java - 如何将列表对象转换为 JavaDStream Spark?

java - 加速 java 深度复制操作

MySql 8.0.11 空间查询慢了 100000 倍

java - log4j:在生产/开发中对标准输出文件/控制台的不同使用

java - Spring JPA Dao - 无法 Autowiring 字段

Javascript:动态创建和访问对象数组

javascript - 将新键添加到数组对象javascript