package jvm;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
* -XX:PermSize=10M -XX:MaxPermSize=10M
* @author gsdhaiji
*
*/
public class JavaMethoAreaOOM {
public static void main(String[] args) {
int i = 1;
while(true) {
Enhancer enhance = new Enhancer();
enhance.setSuperclass(OOMObject.class);
enhance.setUseCache(false);
enhance.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2,
MethodProxy arg3) throws Throwable {
System.out.println("before invoke method" + arg1);
Object obj = arg3.invokeSuper(arg0, arg2);
System.out.println("after inovke method" + arg1);
return obj;
}
});
OOMObject obj = (OOMObject)enhance.create();
obj.sayHello();
}
}
static class OOMObject {
public void sayHello() {
System.out.println ("say: hello!");
}
}
}
使用字节码技术,来增加类,jvm保证方法区可以动态加载这些类到内存