使用SoftReference实现缓存

时间:2015-02-25 23:57:20

标签: java

我有一个可视化数据集的程序。可以一次加载多个数据集(但一次只能显示一个数据集),并且数据集可能足够大以至于存储器成为问题。我想要做的是实现一个缓存机制,以便将数据集缓存在它们自己的临时文件中,并且GUI保存对每个数据集的软引用,以便更有效地使用内存。这就是我的想法:

class DataSetReference extends SoftReference<DataSet> {
   private File cache;

   public DataSetReference(DataSet referent, byte[] rawData) {
      super(referent);
      // Skip error checking, etc.
      cache = File.createTempFile("abc", null);
      writeDataToCache(cache, rawData);
   }

   @Override
   public DataSet get() {
      if (super.get() == null) {
         refreshReferenceFromCache();
      }
      return super.get();
   }

   private refreshReferenceFromCache() {
      DataSet ds = parseDataSetFromFile(cache);
      // profit???
   }
}

然后我意识到SoftReference不可变的,这会杀死这个想法。我似乎要做的就是在软引用之外重新创建DataSet实例,然后创建一个新的软引用,并将旧引用替换为可视化数据集的GUI组件中的new。

我的问题是:是否有一些模式或示例用于实现SoftReference的缓存?这是我第一次尝试使用软引用,在查看其他一些实现后,我会觉得更舒服。感谢。

0 个答案:

没有答案