爱问知识人 爱问教育 医院库

JAVA中具有实例缓存的不可变类有哪些呢?

首页

JAVA中具有实例缓存的不可变类有哪些呢?

JAVA中具有实例缓存的不可变类有哪些呢?

提交回答

全部答案

    2017-07-28 10:25:49
  •   在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对象的可重用性。
       到底如何实现实例的缓存呢?缓存并没有固定的实现方式,完善的缓存实现不仅要考虑何时把实例加入缓存,还要考虑何时把不再使用的实例从缓存中及时清除,以保证有效合理地利用内存空间。一种简单的实现是直接用Java集合来作为实例缓存。 下面的例程,它拥有实例缓存和相应的静态工厂方法valueOf()。
      Name类的实例缓存中可能会加入大量Name对象,为了防止耗尽内存,在实例缓存中存放的是Name对象的软引用(SoftReference)。如果一个对象仅仅持有软引用,Java虚拟机会在内存不足的情况下回收它的内存。

    孟***

    2017-07-28 10:25:49

类似问题

  • 系统软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):