享元模式在Java中的应用
什么是享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
个人理解
我感觉享元模式就是对象创建过多会浪费系统的资源,一种有多选择的单例模式
###享元模式在Java中的应用
包装类
Boolean,Byte,Integer,Long,Character都提供了valueOf()方法。
eg:Long的valueOf()方法会缓存数值-127~128之间的Long对象,在这个范围之间就会直接在这个里面去取,大于这个范围才会去new Long对象
注意:
Byte,Short,Long的范围是-127~128之间。
Character是0~127之间。
Integer是-127~128之间,最小值不能改变,但是最大值可以通过虚拟机参数进行改变。-Djava.long.Intger.IntegerCache.high来改变
Boolean缓存了TRUE和FALSE
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
private static class LongCache {
private LongCache(){}
static final Long cache[] = new Long[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Long(i - 128);
}
}
另外享元模式还有很多的应用,比如:线程池,连接池。