62,614
社区成员
发帖
与我相关
我的任务
分享
public class Main {
public static void main(String[] args) {
String reference = null;
//String reference;
WeakReferenceCache cache = new WeakReferenceCache();
for (int i = 0; i < 1000; i++) {
String str = i + "str";
cache.add(Integer.toString(i), str);
if (i == 100) {
reference = str;
System.out.println(reference);
}
}
System.out.println(cache.get("100"));
System.gc();
System.out.println(cache.get("100"));
// System.out.println(reference);
}
}
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class WeakReferenceCache implements IZMMemCache<String, String> {
private LinkedHashMap<String, WeakReference<String>> maps;
public WeakReferenceCache() {
maps = new LinkedHashMap<String, WeakReference<String>>();
}
@Override
public void add(String key, String value) {
maps.put(key, new WeakReference<String>(value));
}
@Override
public void remove(String key) {
maps.remove(key);
}
@Override
public String get(String key) {
WeakReference<String> refer = maps.get(key);
if (refer != null) {
return refer.get();
}
return null;
}
@Override
public int getSize() {
return maps.size();
}
public HashMap getMap() {
return maps;
}
@Override
public ArrayList<String> getKeys() {
ArrayList<String> array = new ArrayList<String>();
Iterator<Map.Entry<String, WeakReference<String>>> iterator = maps.entrySet().iterator();
while (iterator.hasNext()) {
array.add(iterator.next().getKey());
}
return array;
}
@Override
public void clear() {
maps.clear();
}
}
public class A {
String a;
public void print(){
String b;
for(int i =0 ;i<1;i++){
System.out.println(a);
// System.out.println(b); //error
}
System.out.println(a);
// System.out.println(b); //error
}
}
这是作用域原因。