[改善Java代码]性能考虑,数组是首选
2016-04-21 20:11
701 查看
建议60:性能考虑,数组是首选
一、分析
数组在实际的系统开发中使用的越来越少,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List、Set、Map这些集合使用起来方便,但是在基本类型处理方面,数组还是占优势的,而且集合的底层也是通过数组实现。
二、场景
比如对一个数据集求和的计算:
对于一个int类型的数组求和,取出所有元素的数组元素并相加,此算法中如果是基本类型则使用数组效率最高,使用集合效率次之.
注意才相加求和的运算中,做了一个拆箱动作(sum += datas.get(i); ),这对于性能濒于临界的系统是比较危险的。
在初始化List的时候,要进行装箱动作,把一个int类型包装成一个Integer对象,虽然有整形池在,但不在整型池范围都会产生一个新的Integer对象。
众所周知,基本类型是在栈内存操作的,而对象则是在堆内存中操作的。栈内存的特点是速度快,容量小;堆内存的特点是速度慢,容量大(从性能上讲,基本类型的处理占优势)。
其次,在进行求和计算(或者其他遍历计算) 时要做拆箱动作,因此无谓的性能消耗也就产生了.
三、建议
性能要求较高的场景中,使用数组替代集合。在实际测试中发现:对于基本类型进行求和计算时,数组的效率是集合的10倍。
一、分析
数组在实际的系统开发中使用的越来越少,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List、Set、Map这些集合使用起来方便,但是在基本类型处理方面,数组还是占优势的,而且集合的底层也是通过数组实现。
二、场景
比如对一个数据集求和的计算:
//对数组求和 public static int sum(int[] datas){ int sum = 0; for(int i = 0; I < datas.length; I++){ sum += datas[i]; } return sum; }
对于一个int类型的数组求和,取出所有元素的数组元素并相加,此算法中如果是基本类型则使用数组效率最高,使用集合效率次之.
//对列表求和计算 public static int sum(List<Integer> datas){ int sum = 0; for(int i = 0; i < datas.size(); i++){ sum += datas.get(i); } return sum; }
注意才相加求和的运算中,做了一个拆箱动作(sum += datas.get(i); ),这对于性能濒于临界的系统是比较危险的。
在初始化List的时候,要进行装箱动作,把一个int类型包装成一个Integer对象,虽然有整形池在,但不在整型池范围都会产生一个新的Integer对象。
众所周知,基本类型是在栈内存操作的,而对象则是在堆内存中操作的。栈内存的特点是速度快,容量小;堆内存的特点是速度慢,容量大(从性能上讲,基本类型的处理占优势)。
其次,在进行求和计算(或者其他遍历计算) 时要做拆箱动作,因此无谓的性能消耗也就产生了.
三、建议
性能要求较高的场景中,使用数组替代集合。在实际测试中发现:对于基本类型进行求和计算时,数组的效率是集合的10倍。
相关文章推荐
- Highcharts导出代码Java版
- Java中大小端的处理
- java--ArrayList去除集合中字符串的重复值
- java集合框架09——HashTable和源码分析
- struts2使用redirectAction,运行后地址没有改变,result中没有配置该result
- Java虚拟机运行时数据区
- JAVA开发相关
- 使用javah生成jni 头文件和使用ndk编译so库
- java实现阶乘的计算,抛出异常不会,怎么使用标号跳转,需要帮解决一下
- 趣味整数-3位反序数-java
- Eclipse取得路径的方法
- SSH:Struts has detected an unhandled exception
- 快速构建Spring boot项目(功能是检测访问页面的设备)
- Struts2中namespace的用法
- struts --interceptor
- 如何在Eclipse中查看JDK类库的源代码 【转】
- Eclipse将输出结果保存到文件中
- Java urlrewrite+Maven 简单使用
- Java Calendar 基础详解实例
- struts--Action解读