動態代理限制快取容器的容量
在Java Web中經常使用快取,但是如果快取資料量非常大,則容易出現OOM的情況。
可以使用動態代理,限制快取容器的容量。
如果達到容量上限,則可以移除過期的快取資料。
其中invoke方法中的proxy引數是代理物件。
可以使用動態代理,限制快取容器的容量。
如果達到容量上限,則可以移除過期的快取資料。
-
import java.lang.reflect.InvocationHandler;
-
import java.lang.reflect.Method;
-
import java.lang.reflect.Proxy;
-
import java.util.HashMap;
-
import java.util.Map;
-
-
public class MapInvocationHandler implements InvocationHandler {
-
-
private Map<String, String> map = new HashMap<String, String>();
-
-
private int limit = 10;
-
-
public MapInvocationHandler(int limit) {
-
this.limit = limit;
-
}
-
-
public MapInvocationHandler() {
-
}
-
-
public Map<String, String> getInstance() {
-
return (Map<String, String>) Proxy.newProxyInstance(map.getClass()
-
.getClassLoader(), map.getClass().getInterfaces(), this);
-
}
-
-
@Override
-
public Object invoke(Object proxy, Method method, Object[] args)
-
throws Throwable {
-
Object result;
-
if ("put".equals(method.getName())) {
-
if (map.size() == limit) {
-
return "已達容器上線";
-
}
-
System.out.println("Key:" + args[0] + ",Value:" + args[1]);
-
}
-
result = method.invoke(map, args);
-
return result;
-
}
-
-
public static void main(String[] args) {
-
Map<String, String> map = new MapInvocationHandler(3).getInstance();
-
map.put("1", "1");
-
map.put("2", "2");
-
map.put("3", "3");
-
String s = map.put("4", "4");
-
System.out.println(s);
-
}
-
- }
其中invoke方法中的proxy引數是代理物件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-776054/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 固定容量的本地快取設計快取
- 容量小速度快—小快取裡的大學問快取
- Nginx 代理快取Nginx快取
- HTTP快取&代理HTTP快取
- 動態 SQL 和快取機制SQL快取
- Java代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- Solon2 開發之容器,八、動態代理的本質
- 靜態代理和動態代理
- JAVA 靜態代理 & 動態代理Java
- nginx反向代理快取教程。Nginx快取
- Java中的靜態代理和動態代理Java
- 靜態代理、動態代理與Mybatis的理解MyBatis
- 代理模式詳解:靜態代理、JDK動態代理與Cglib動態代理模式JDKCGLib
- VUE快取:動態keep-aliveVue快取Keep-Alive
- 代理模式 - 動態代理模式
- 靜態快取快取
- JVM 如何獲取當前容器的資源限制?JVM
- java 的動態代理Java
- java靜態代理和動態代理Java
- 動態代理
- 代理與反向代理、負載均衡和快取負載快取
- Vue 全站快取之 keep-alive : 動態移除快取Vue快取Keep-Alive
- 代理快取有什麼弊端?快取
- AOP之靜態代理VS動態代理
- 菜鳥學SSH(十四)——Spring容器AOP的實現原理——動態代理Spring
- 你必須會的 JDK 動態代理和 CGLIB 動態代理JDKCGLib
- 讓我們打一場動態代理的官司–Java動態代理Java
- JDK動態代理JDK
- 動態代理模式模式
- java動態代理Java
- java動態代理動態在哪裡?Java
- 輕鬆理解 Java 靜態代理/動態代理Java
- 3.靜態代理&動態代理&CGlibCGLib
- cglib動態代理和jdk動態代理的區別與應用CGLibJDK
- Java 8 動態代理的新技巧(1):為什麼使用動態代理?Java
- Android 動態代理以及利用動態代理實現 ServiceHookAndroidHook
- iis使用動態 IP 限制
- 重新認識下JVM級別的本地快取框架Guava Cache(2)——深入解讀其容量限制與資料淘汰策略JVM快取框架Guava