类型
java的缓冲池分为两种,数值型的和字符串类型的。缓冲池空间位于垃圾收集器管理的内存之外。 这是分配本地堆外内存的一种方法。
字符串缓冲池
String被声明为final,因此它不可被继承。在java8中,String内部使用char数组存数据。
数值型缓冲池
Boolean,缓存了 true/false 对应实例,确切说,只会返回两个常量实例Boolean.TRUE/FALSE。
Short,同样是缓存了 -128 到 127 之间的数值。
Byte,数值有限,所以全部都被缓存。
Character,缓存范围’\u0000’ 到 ‘\u007F’。
Integer,-128 到 127 之间的数值。
Long,-128 到 127 之间的数值。
举例
Integer的IntegerCache
当符合i >= IntegerCache.low && i <= IntegerCache.high时返回IntegerCache.cache[i + (-IntegerCache.low)]
当不符合时返回new Integer(i)。
根据IntegerCache的源码,得到low为-128,high为127,即Integer的缓冲池大小为1个字节。
则当Integer直接赋值时,值-128到127之间时,创建的对象存放在常量池中,直接从常量池中获取数据。