while(true){
Enhancer eh = new Enhancer();
eh.setSuperclass(OOMOjbect.class);
eh.setUseCache(false);
eh.setCallback(new MethodInterceptor(){
@Override
public Object intercept(Object arg0, Method arg1,
Object[] arg2, MethodProxy arg3) throws Throwable {
// TODO Auto-generated method stub
return arg3.invokeSuper(arg0, arg2);
}
});
eh.create();
}
}
}
分析:
我们知道方法区是存放一些类的信息等,所以我们可以使用类加载无限循环加载class,这样就会出现方法区的OOM异常 。
手动将栈的大小调小点
加上JVM参数:-XX:PermSize=10M -XX:MaxPermSize=10M,运行后会报如下异常:
Exception in thread "main"
java.lang.OutOfMemoryError: PermGen space 。
常量池溢出public class ConstantOOM {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
int i=0;
while(true){
list.add(String.valueOf(i++).intern());
}
}
}
分析:
我们知道常量池中存放的是运行过程中的常量,同时我们知道String类型的intern方法是将字符串的值放到常量池中的 。所以上面弄可以开一个死循环将字符串的值都放到常量池中,这样常量池就会出现OOM异常了 。因为常量池本身就是方法区的一部分,所以我们也可以手动地调节一下栈的大小 。
推荐:
《深入理解Java虚拟机》
【互联网云服务器JVM监控——JDK自带工具】
推荐阅读
- 4 个打造多媒体和共享服务器的开源工具
- Linux服务器集群系统——LVS集群中的IP负载均衡技术
- 云南人种来源?云南新发现的民族
- 桂林|“互联网+招聘”2022年桂林市春风行动网络招聘会落幕
- 163邮箱怎么注册账号?163的邮箱怎么登录
- Docker容器网络实操教程
- 云海金龙的做法
- 普洱茶六大茶山之五,云南普洱茶产于六大茶山
- 南岳云雾茶制茶工艺,云雾茶的保存方法
- 《三国演义》赵云的特点?三国演义中的赵云是一个什么样的人呢_1