Java 8 自动装箱拆箱效率影响测试
Java 8 自动装箱拆箱效率影响测试
测试完毕之后的结论:
1. 装箱发生 232−12^{32-1}232−1 次的时候影响时间大概为10秒
2. 拆箱发生 232−12^{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 -> LongassignBoxing = i;}long end = System.currentTimeMillis();System.out.println("assignment : assignNormal: " + assignNormal + " begin: " + begin + " middle: " + middle + " normal: " + (middle - begin));System.out.println("assignment : assignBoxing: " + assignBoxing + " middle: " + middle + " end: " + end + " boxing: " + (end - middle));/**** add : sumNormal: 2305843005992468481 begin: 1550286461670 middle: 1550286462474 normal: 804* add : sumBoxing: 2305843005992468481 middle: 1550286462474 end: 1550286474223 boxing: 11749**/long sumNormal = 0L;Long sumBoxing = 0L;begin = System.currentTimeMillis();for (long i = 0L; i < Integer.MAX_VALUE; i++) {sumNormal += i;}middle = System.currentTimeMillis();for (long i = 0L; i < Integer.MAX_VALUE; i++) {// 装箱 long -> LongsumBoxing += i;}end = System.currentTimeMillis();System.out.println("add : sumNormal: " + sumNormal + " begin: " + begin + " middle: " + middle + " normal: " + (middle - begin));System.out.println("add : sumBoxing: " + sumBoxing + " middle: " + middle + " end: " + end + " boxing: " + (end - middle));}public void autoBoxedTest() {/*** assignment : normal :2147483646 begin: 1550286528618 middle: 1550286538433 normal spent: 9815 ms* assignment : boxed : 2147483646 middle: 1550286538433 end: 1550286560456 boxed spent: 22023 ms*/Long normal = 0L;long boxed = 0L;long begin = System.currentTimeMillis();for (Long i = 0L; i.compareTo(new Long(Integer.MAX_VALUE)) < 0; i++) {normal = i;}long middle = System.currentTimeMillis();for (Long i = 0L; i.compareTo(new Long(Integer.MAX_VALUE)) < 0; i++) {// 拆箱 Long -> longboxed = i;}long end = System.currentTimeMillis();System.out.println("assignment : normal :" + normal + " begin: " + begin + " middle: " + middle + " normal spent: " + (middle - begin) + " ms");System.out.println("assignment : boxed : " + boxed + " middle: " + middle + " end: " + end + " boxed spent: " + (end - middle) + " ms");/*** add : normal :2305843005992468481begin: 1550286560457 middle: 1550286577430 normal spent: 16973 ms* add : boxed : 2305843005992468481middle: 1550286577430 end: 1550286601522 boxed spent: 24092 ms*/begin = System.currentTimeMillis();normal = 0L;boxed = 0L;for (Long i = 0L; i.compareTo(new Long(Integer.MAX_VALUE)) < 0; i++) {normal += i;}middle = System.currentTimeMillis();for (Long i = 0L; i.compareTo(new Long(Integer.MAX_VALUE)) < 0; i++) {// 拆箱 Long -> longboxed += i;}end = System.currentTimeMillis();System.out.println("add : normal :" + normal + "begin: " + begin + " middle: " + middle + " normal spent: " + (middle - begin) + " ms");System.out.println("add : boxed : " + boxed + "middle: " + middle + " end: " + end + " boxed spent: " + (end - middle) + " ms");}
Java 8 自动装箱拆箱效率影响测试相关推荐
- java 自动拆箱_Java中的自动装箱拆箱
Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 //自动装箱 2 Integer total = 90; ...
- Java自动装箱/拆箱 - Java那些事儿
昨天Java基本数据类型和引用类型一文中漏了几张图,已经补上,需要的自己回头去看,本系列文章首发于公众号:saysayJava. 在让人疑惑的Java代码 - Java那些事儿 一文中我们说到编译器自 ...
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
参考:http://blog.csdn.net/mazhimazh/article/details/16799925 1. Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法? 原始类型 ...
- java自动装箱拆箱原理
java自动装箱拆箱原理 看了很多博主都没写原理,只是浅显地说了自动装箱拆箱的含义,我就把这个必须知道的知识写一下吧 1.自动装箱 以int -> Integer为例,Integer integ ...
- java自动装箱拆箱深入剖析
这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装 ...
- Java自动装箱/拆箱
自动装箱和自动拆箱 那么Java中有八大基本数据类型,byte.char.short.int.long.double.float.boolean.而它们有对应的包装类 Byte.Character.S ...
- Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数
1.For each循环:1.1.语法:1.2.For each循环的使用:1.3.嵌套For each循环:1.4.三种循环遍历集合的列举:1.5.增强的for循环的缺点:2.自动装箱/拆箱(Aut ...
- 为什么需要java包装类,装箱拆箱,基本类型与字符串之间的转换,java数据类型
为什么需要包装类? 首先,Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,将每个基本数据类型设计一个对应的类进行代表,这种方式增强了Java面向对象的性质. 其次,如果 ...
- Java 性能笔记:自动装箱/拆箱(转)
如果我说"仅仅修改下面代码中的一个字符就可以获得五倍于当前的运行速度"你会怎么想呢? long t = System.currentTimeMillis(); Long sum = ...
最新文章
- 【VB】学生信息管理系统3——连接数据库的前提
- 计算机网络控制系统,计算机网络远程控制系统的应用研究(原稿)
- usermod命令的一些用法详解
- r语言 整理、处理数据步骤_R语言万能数据清洗整理包Tidyverse(一)
- 运行时权限+读取系统联系人
- oracle中sql命令分为几类,常用的SQL命令和ORACLE命令对比
- Head First JSP---随笔六
- python中index函数_python中index函数的用法
- LVS负载均衡下session共享的实现方式-持久化连接
- 数据仓库中两种数据模型的分析比较
- 学习Netflix管理员–第1部分
- 详解停车位检测论文:Attentional Graph Neural Network for Parking-slot Detection
- mysql服务连接标识_MySQL 连接 | 菜鸟教程
- Inside Google’s language detection tool
- 【转】其他人的BUG
- 测试用例编号_如何编写一个规范的测试用例?你应该知道的!
- 海马玩android模拟器哪个好用,主流安卓模拟器评测:叶子猪海马玩表现突出
- ant design table列表 合并列单元格
- Linux文件误删除恢复操作
- 语音识别:声学的要素和特征