Java 8 自动装箱拆箱效率影响测试
测试完毕之后的结论:
1. 装箱发生 2 32 − 1 2^{32-1} 232−1 次的时候影响时间大概为10秒
2. 拆箱发生 2 32 − 1 2^{32-1} 232−1 次的时候影响时间为10~20秒
因为 System.gc() 并不会立即执行垃圾回收所以不确定具体对效率的影响.
拆箱/装箱 影响效率的主要原因是会产生很多的小对象, 影响垃圾回收.
拆箱: 在栈上创建一个基本类型的数据.
装箱: 需要在堆上创建一个新的对象.
如果想要尽量避免自动装箱/拆箱 对效率有影响就需要在设置数据类型的时候认真思考下.
测试代码如下.
public void autoBoxingTest() {
/**
*
* assignment : assignNormal: 2147483646 begin: 1550286447879 middle: 1550286450002 normal: 2123
* assignment : assignBoxing: 2147483646 middle: 1550286450002 end: 1550286461670 boxing: 11668
*
*/
long assignNormal = 0L;
Long assignBoxing = 0L;
long begin = System.currentTimeMillis();
for (long i = 0L; i < Integer.MAX_VALUE; i++) {
assignNormal = i;
}
long middle = System.currentTimeMillis();
for (long i = 0L; i < Integer.MAX_VALUE; i++) {
// 装箱 long -> Long
assignBoxing = i;
}
long end = System.currentTimeMillis();
System.out.println("assignment : assignNormal: " + assignNormal + " begin: " + begin + " middle: " + middle + " normal: " + (middle - begin));
System.out.println("assignment : assignBoxing: " + assignBoxing +