享元,从字面上看享就是共享,元就是细粒度对象(可理解为占用空间小的对象,如Byte类型对象)。总的说来就是将这些小对象放在一共享池中,比如你进行了一下操作:
Integer i1= 55 ;
Integer i2= 55 ; 。非享元时就是建立了2个不同的对象i1和i2,在享元时,就是i1和i2指向了55这个整数型对象,这个55的对象是放在共享池中的。JDK1.5后将 -128-127之间的数值 会存在 一个 缓存池中,下次使用的时候 先从缓存池中 取出 这个数据 ,而不会去分配它的内存。还比如word中 我们输入 多个 aaaaa那么 如果为每个a分配一个 内存空间 那么 内存的浪费 很严重 ,这时享元模式就可以只建立一个a对象,然后对a进行5次调用即可,不需要建立5个a对象。
享元对象的优点:减少对象数量,节省内存空间。
享元模式的缺点:维护共享对象,需要额外的开销(用一个线程来维护垃圾回收)。
享元模式的本质:分离与共享。 |