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 自动装箱拆箱效率影响测试相关推荐

  1. java 自动拆箱_Java中的自动装箱拆箱

    Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 //自动装箱 2 Integer total = 90; ...

  2. Java自动装箱/拆箱 - Java那些事儿

    昨天Java基本数据类型和引用类型一文中漏了几张图,已经补上,需要的自己回头去看,本系列文章首发于公众号:saysayJava. 在让人疑惑的Java代码 - Java那些事儿 一文中我们说到编译器自 ...

  3. Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?

    参考:http://blog.csdn.net/mazhimazh/article/details/16799925 1. Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法? 原始类型 ...

  4. java自动装箱拆箱原理

    java自动装箱拆箱原理 看了很多博主都没写原理,只是浅显地说了自动装箱拆箱的含义,我就把这个必须知道的知识写一下吧 1.自动装箱 以int -> Integer为例,Integer integ ...

  5. java自动装箱拆箱深入剖析

    这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:  java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装 ...

  6. Java自动装箱/拆箱

    自动装箱和自动拆箱 那么Java中有八大基本数据类型,byte.char.short.int.long.double.float.boolean.而它们有对应的包装类 Byte.Character.S ...

  7. Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数

    1.For each循环:1.1.语法:1.2.For each循环的使用:1.3.嵌套For each循环:1.4.三种循环遍历集合的列举:1.5.增强的for循环的缺点:2.自动装箱/拆箱(Aut ...

  8. 为什么需要java包装类,装箱拆箱,基本类型与字符串之间的转换,java数据类型

    为什么需要包装类? 首先,Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,将每个基本数据类型设计一个对应的类进行代表,这种方式增强了Java面向对象的性质. 其次,如果 ...

  9. Java 性能笔记:自动装箱/拆箱(转)

    如果我说"仅仅修改下面代码中的一个字符就可以获得五倍于当前的运行速度"你会怎么想呢? long t = System.currentTimeMillis(); Long sum = ...

最新文章

  1. 【VB】学生信息管理系统3——连接数据库的前提
  2. 计算机网络控制系统,计算机网络远程控制系统的应用研究(原稿)
  3. usermod命令的一些用法详解
  4. r语言 整理、处理数据步骤_R语言万能数据清洗整理包Tidyverse(一)
  5. 运行时权限+读取系统联系人
  6. oracle中sql命令分为几类,常用的SQL命令和ORACLE命令对比
  7. Head First JSP---随笔六
  8. python中index函数_python中index函数的用法
  9. LVS负载均衡下session共享的实现方式-持久化连接
  10. 数据仓库中两种数据模型的分析比较
  11. 学习Netflix管理员–第1部分
  12. 详解停车位检测论文:Attentional Graph Neural Network for Parking-slot Detection
  13. mysql服务连接标识_MySQL 连接 | 菜鸟教程
  14. Inside Google’s language detection tool
  15. 【转】其他人的BUG
  16. 测试用例编号_如何编写一个规范的测试用例?你应该知道的!
  17. 海马玩android模拟器哪个好用,主流安卓模拟器评测:叶子猪海马玩表现突出
  18. ant design table列表 合并列单元格
  19. Linux文件误删除恢复操作
  20. 语音识别:声学的要素和特征

热门文章

  1. 如何让ChatGPT生成图片
  2. Contest1019 - 2019年天梯赛省赛选拔
  3. DeOldify图片上色使用教程
  4. 【论文阅读】YOLO-X:Exceeding YOLO Series in 2021
  5. PS立体插件一键将平面对象转换生成2.5D等距插画效果
  6. 7-2 厘米换算英尺英寸 (C语言)
  7. 快速打开DOS命令行窗口
  8. html css调用自定义字体,css怎么自定义字体?
  9. 框架手写系列---javassist修改字节码方式,实现美团Robust热修复框架
  10. ps 不能完成请求 程序错误