繁体   English   中英

Android上的Java中的对象内存管理

[英]Objects memory management in Java on Android

如果我有 :

  • 包含List<B>的对象A
  • 我的List<B>包含List<C>所有对象B
  • 我的List<C>中的所有对象C都包含List<D>等...

内存如何管理? 实例化所有“链接的”对象(B,C,D ...),并在实例化时将其存储在内存中?

每次调用new()时,都会从堆中获取相应对象所需的内存。

正如您最常创建一个空列表开始一样-仅请求该事物所需的内存。

换句话说:无法一口气创建“完整”结构。 如果这样做,则没有区别:

List<List<String>> strings = new ArrayList<>();

要么

List<Number> numbers = new ArrayList<>();

这两个指令在堆上分配的内存量是相同的! 因为在两种情况下都创建了一个新对象(该ArrayList实例)。

语句List<String> strings = new ArrayList<>(); 只为列表本身分配堆空间,列表仅存储对其包含的对象的引用 ,不包含对象本身。

请注意,ArrayList使用数组作为其内部结构(您可能已经猜到了),因此构造函数基本上是在分配初始大小的数组。 为了创建巨大的ArrayList,您应该预先分配空间以提高效率,例如List<String> strings = new ArrayList<>(2000); 为2000个String引用预分配空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM