java基础入门-arraylist存储开销
来源:互联网 发布:软件视频会议方案 编辑:程序博客网 时间:2024/06/06 20:29
今天我们来看一下arraylist的存储开销,因为在项目当中,我尝试了一个非常大的arraylist,然后内存爆了
所以我看了下源码,原来arraylist的存储开销是比较大的,先上代码
import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("1");System.out.println(list.size());for (int i = 0; i < 1000000; i++) {if (i==99999||i==999999) {System.out.println(i);}list.add("1");}System.out.println(list.size());}}
我们再中间打印i的地方下断点,跟踪arraylist的源码
下面是arraylist的源码
public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length;if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity)newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);} }
当i=99999时,arraylist所占的大小是132385
当i=999999时,arraylist所占的大小是1005308
如果我把i增加10倍,当i=9999999时,arraylist所占的大小是11451103
其实,arraylist的大小计算主要是由下面这一句控制,一直这样算出来
int newCapacity = (oldCapacity * 3)/2 + 1;
所以,当超过某一个数量级的时候,内存就会爆了,这是java留给我们的一个坑,大家在计算大数据的时候要注意啦
0 0
- java基础入门-arraylist存储开销
- java基础入门-----ArrayList练习1
- java基础入门----ArrayList练习2
- Java ArrayList用法入门
- java-基础-ArrayList剖析
- JAVA基础--ArrayList
- java基础之ArrayList
- Java基础-----集合Arraylist
- 简谈JAVA基础--ArrayList
- Java基础之ArrayList
- ArrayList——内存开销,时间上的开销
- java基础应用之ArrayList
- Java基础----ArrayList、LinkedList、Vector
- 黑马程序员-java基础-ArrayList
- Java基础-ArrayList源码浅析
- Java基础--集合List-ArrayList
- 【Java基础】ArrayList工作原理
- java 从零开始,学习笔记之基础入门<数组列表(ArrayList)>(九)
- [日志处理工作之三]使用flume采集DB2日志推送到kafka,并使用spark streaming拉取指定topic的日志
- 《飞轮效应:数据驱动的企业》
- iOS 客户端学习-支付宝
- OAuth 2.0系列教程(四) 客户端类型
- NN(BP)算法
- java基础入门-arraylist存储开销
- eclipse下出现乱码的问题
- 高斯判别分析
- jquery 选择器
- MAC系统IntelliJ Idea 14 常用快捷键汇总
- 对于业务中库存超卖测试
- 13. Roman to Integer
- mAdapter.notifyDataSetChanged()无法更新UI
- 手把手教你ARC——ARC入门和使用