首页 > 应用开发 > > Java中的享元设计模式,涨姿势了
作者:Mazin
来源:https://my.oschina.net/u/3441184/blog/886337
首先来看一段代码:
运行结果为:true false
为什么会出现这种情况呢?我们来从源代码中分析一下,首先Integer a = 127这行代码调用的是Integer中的valueOf方法,我们来看看这个方法的源码:
其中IntegerCache就是Integer中的一个内部类,从这段代码中我们可以看出,当我的参数i的范围在low和high之间时,会直接返回这个内部类中的一个数组中对应的值,否则会创建一个新的对象。
那么我们再来看你看这个数组是怎么创建的:
由这段代码我们可以知道,这个内部类在初始化的时候创建了一个数组,并且这个数组的长度为 (high-low+1),然后遍历循环,创建了从-128到127这256个Integer对象,并将它们放入到这个数组中。
所以当我们在调用valueOf的时候,如果值得范围是在128到127之间,那么是不会创建新的对象的,但是如果超过了这个范围,那么就会创建姓的对象。这就是之前代码运行结果的原因。
到了这里,享元模式的核心思想已经渐渐清晰了,其实就是将一些常用的对象缓存起来,在使用的时候直接拿过来使用,不必创建新的对象,这个省去了创建对象时消耗的资源,也省去了GC在回收这些垃对象时消耗的资源。
在我们日常开发中,享元模式还是比较常见的,最典型的就是池技术,例如服务器的线程池,JDBC的连接池,这些都是享元模式的很好的体现,当然,常量池也是享元模式思想。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/615/viewspace-3161164/ ,如需转载,请注明出处,否则将追究法律责任。