我有非空集合A和非空集合B,现在新建一个集合C,向C中addAll(A)、addAll(B)时会增加内存占用吗
问题比较简单我就不上代码了,,望解答。
我貌似对java的内存了解的很少,最近写的很多轮子都希望考虑下效率问题,不禁引发以上思考。
还是会增加一些内存的占用的,例如指向对象的数组或者链表需要占用内存,不过这些内存占用比较少罢了。
对象已经创建了 只不过在C中引用 应该不会占用内存
首先了解几点
1:list底层是数组,用来存放对象的应用地址,list在初始化的时候会开辟内存来存放引用地址
2:list扩容机制,当list容量满了的时候会创建新的数组(容量比以前的大,数据过大规律大致为 翻倍增长),将旧数组的引用地址复制到新的数组,旧数组内存等待gc
综上分析:
如果说你C数组是这样创建
List C = new ArrayList<>(A.size() + Byte.size());
一开始就声明了容量大小,初始化就创建了大小,是不会重新开辟内存的
如果说是如下创建
List C = new ArrayList<>();
当数据量大于初始熔量时会增加内存占用;
所以建议你在使用list的时候尽量确认数组容量,合理规避list扩容