CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

JAVA中具有实例缓存的不可变类

作者: 网络转载,  出处:中文JAVA技术网 , 责任编辑: 李春禹, 
2007-12-18 14:19
  在JDK 1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。//如果在缓存中不存在Name对象,就创建该对象,并把它的软引用加入到实例缓存   Name name=new Name(firstname,lastname);

  不可变类的实例的状态不会变化,这样的实例可以安全地被其他与之关联的对象共享,还可以安全地被多个线程共享。为了节省内存空间,优化程序的性能,应该尽可能地重用不可变类的实例,避免重复创建具有相同属性值的不可变类的实例。

  在JDK 1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。JDK 1.5的Integer类新增了一个参数,为int类型的静态工厂方法valueOf(int i),它的处理流程如下:

  if(在实例缓存中存在取值为i的实例)

  直接返回这个实例

  else{

  用new语句创建一个取值为i的Integer实例

  把这个实例存放在实例缓存中

  返回这个实例

  }

  在以下程序代码中,分别用new语句和Integer类的valueOf(int i)方法来获得Integer实例。 

 Integer a=new Integer(10);
  Integer b=new Integer(10);
  Integer c=Integer.valueOf(10);
  Integer d= Integer.valueOf(10);
  System.out.println(a==b); //打印false
  System.out.println(a==c); //打印false
  System.out.println(c==d); //打印true
  以上代码共创建了3个Integer对象,每个new语句都会创建一个新的Integer对象。而Integer.valueOf(10)方法仅在第一次被调用时,创建取值为10的Integer对象,在第二次被调用时,直接从实例缓存中获得它。由此可见,在程序中用valueOf()静态工厂方法获得Integer对象,可以提高Integer对象的可重用性。

共2页。 1 2 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i