[英]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.