在做java程序的时候,内存监控,缓存设置,是提升性能的一个比较重要的环节,那么看看jdk本身自带的管理缓存,内存的主要设置。
定义如下两个变量,用来控制jvm中缓存的大小:
这做的特点就是:一旦达到了JVM的上限,就会把缓存在jvm的数据全部清掉,不会残留。
private static final ReferenceQueue queue = new ReferenceQueue();
private static final Map<File, SoftReference<BlockSet>> cache = new HashMap();
public static BlockSet get(File file) {
SoftReference<BlockSet> ref = cache.get(file);
BlockSet block = ref == null ? null : ref.get();
if(block == null) {
synchronized(cache) {
ref = cache.get(file);
block = ref == null ? null : ref.get();
if(block == null) {
block = new BlockSet();
cache.put(file, new SoftReference<BlockSet>(block, queue));
}
}
}
block.init(file);
return block;
}
get 方法put 的是一个file文件,但是这个文件会经常不定时的被访问,那么如何高效快速,那就是使用缓存。
而SoftReference 就是 jdk 自带的缓存机制,用来控制缓存的,使用方式如上代码所示。
缺点:只要已达到jvm的maxmemory,在内存没有oom(Out of Memory)之前,就会释放所有的缓存数据。
使用不是很理想,所有需要借用第三方的缓存框架来弥补这个缺陷。
使用缓存的目的:
缓存我的常使用的数据,不常使用的可以不缓存,这样提高效率,减少IO操作。