Java自动装箱和拆箱,包装类缓存机制和JVM调节
2017-07-17 00:00
525 查看
摘要: Java自动装箱和拆箱,包装类缓存机制和JVM调节
自动装箱,个人感觉也就是为了所谓的java泛型,泛型就是一种糖,装箱是一种糖也就更好解释了。并且两者都是编译器提供的,都存在于编译期(当然编译器做的越多,JVM就可以解释的越快),我想通过反编译,可以轻松的发现。
自动装箱:把基本类型用它们对应的引用类型包装起来,使它们具有对象的特质 Integer a=3(Integer源码,注释的信息量很大啊( ̄ ̄)")
自动拆箱:将Integer及Double这样的引用类型的对象重新简化为基本类型的数据 int i = new Integer(2)
调整JVM参数-XX:AutoBoxCacheMax=250,最大缓存值可以达到-128—250 ,只能调整上限,这和Integer缓存算法实现有关,当然这个参数只对Integer有效,Long...无法调节,通过源码可以清楚的看到这一点。
关于包装类的equals
关于==,说-128—127存在所谓的常量池(因为缓存就是一个静态数组,可以认为存在常量池),不如说是整形包装类停供的缓存机制,因为当-128—127是从缓存(xxxCache数组)中取。
每一个整形包装类里面都有一个,私有静态内部类XXXCache,里面含有对应类型的固定长度(其实通过JVM参数可以调节)的final cache数组 。见下面源码(注意注释):
再看一下Long的(很简单):
再看一下valueOf的源码,就会发现如果值在-128—127,会直接从cache(就是一个数组,在XXXCache私有静态内部类中)中取。
关于Java自动装箱和拆箱
基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能自动装箱,个人感觉也就是为了所谓的java泛型,泛型就是一种糖,装箱是一种糖也就更好解释了。并且两者都是编译器提供的,都存在于编译期(当然编译器做的越多,JVM就可以解释的越快),我想通过反编译,可以轻松的发现。
自动装箱:把基本类型用它们对应的引用类型包装起来,使它们具有对象的特质 Integer a=3(Integer源码,注释的信息量很大啊( ̄ ̄)")
自动拆箱:将Integer及Double这样的引用类型的对象重新简化为基本类型的数据 int i = new Integer(2)
基本类型防迷惑
基本类型不管多大,==都返回true,因为基本类型不会比较地址,更不存在equals包装类所提供的缓存机制
每个整形的包装类,包括Long、Integer、Short、Byte、Character,都提供了缓存机制(一种优化手段),但是Float、Double没有,也就没有==比较的有趣现象了。调整JVM参数-XX:AutoBoxCacheMax=250,最大缓存值可以达到-128—250 ,只能调整上限,这和Integer缓存算法实现有关,当然这个参数只对Integer有效,Long...无法调节,通过源码可以清楚的看到这一点。
关于包装类的equals
关于==,说-128—127存在所谓的常量池(因为缓存就是一个静态数组,可以认为存在常量池),不如说是整形包装类停供的缓存机制,因为当-128—127是从缓存(xxxCache数组)中取。
每一个整形包装类里面都有一个,私有静态内部类XXXCache,里面含有对应类型的固定长度(其实通过JVM参数可以调节)的final cache数组 。见下面源码(注意注释):
再看一下Long的(很简单):
再看一下valueOf的源码,就会发现如果值在-128—127,会直接从cache(就是一个数组,在XXXCache私有静态内部类中)中取。
相关文章推荐
- Java基础(13):Java的自动装箱/拆箱机制、整型包装类缓存机制
- java 自动装箱拆箱及 数据对象的缓存机制详解
- java基础整理の自动装箱雨拆箱(包装类)
- JAVA自动装箱拆箱以及装箱时的缓存问题
- 从一个 NullPointerException 探究 Java 的自动装箱拆箱机制
- 【Java】Java包装类,Java的自动打包(装箱)与解包(拆箱)
- java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
- Java迷题:等于,还是不等于? 装箱 拆箱 及IntegerCache 缓存机制
- java里重载时的自动装箱与拆箱机制
- Java 包装类 自动装箱和拆箱--Integer
- Java包装类、自动装箱与拆箱知识总结
- java中自动打包+解包机制(又称自动装箱,拆箱)Auto-Boxing,UnBoxing
- Java 包装类 自动装箱和拆箱
- Java基础知识强化66:基本类型包装类之JDK5新特性自动装箱和拆箱
- java语言基础(59)——jdk5自动装箱和拆箱(基本数据类型与包装类之间的转换)
- java中自动打包+解包机制(又称自动装箱,拆箱)Auto-Boxing,UnBoxing
- Java 包装类 自动装箱和拆箱
- java中自动装箱、拆箱和包装类默认值问题
- I学霸官方免费教程二十一:Java常用类之包装类 自动装箱 自动拆箱
- java学习之旅64--常用类_自动装箱和拆箱_缓存处理