梁志冰 发表于 2012-9-5 21:55
什么是享元模式呀?
装箱与拆箱 Java的 享元模式
在java中有一种 模式叫做 装箱 和拆箱 flyweight 享元模式
例如
Integer i= 55 ; //那么自动把55 装箱成 Integer 对象
System.out.println(i) ; //自动拆箱 将Integer对象拆箱成 int型变量 输出
Integer i1= 55 ;
Integer i2= 55 ;
Integer j1= 355 ;
Integer j2= 355 ;
i1==i2 ;//结果为 true
j1==j2 ;//结果为false
原因是Java的享元模式 ,-128-127之间的数值 会存在 一个 缓存池中,下次使用的时候 先从缓存池中 取出 这个数据 ,而不会去分配它的内存 。
只有 一个字节以内的 数据才会存在缓存池中 。
比如word中 我们输入 多个 aaaaa那么 如果为每个a分配一个 内存空间 那么 内存的浪费 很严重 ,这种享元模式
就是在使用的地方引用 同一个 数据 ,就是属性相同的 一字节以内的小对象 引用同一个对象
不仅在自动拆箱和装箱中会有上述结果 就算我们自己手工创建的对象也有 享元模式
Integer i1=Integer.valueOf(333);
Integer i2=Integer.valueOf(333) ;
i1==i2 ;//false 只有-128-127之间的数据才可以利用享元模式
|