【JVM】4_利用GCLib测试方法区溢出
来源:互联网 发布:电驴连接不上kad网络 编辑:程序博客网 时间:2024/06/07 01:38
方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。对于这些区域的测试,基本的思路是运行时产生大量的类去填满方法区,直到溢出,用GCLib可以方便我们测试方法区溢出。
import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/** * VM参数 : -XX:-PermSize=10m -XX:MaxPermSize=10m * */public class Main { public static void main(String[]args) { while (true) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(OOMObject.class); enhancer.setUseCache(false); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { return methodProxy.invokeSuper(o, objects); } }); OOMObject oomObject = (OOMObject) enhancer.create(); oomObject.sayHi(); } } static class OOMObject{ public void sayHi(){ System.out.println("hi"); } }}
运行结果:
Caused by: java.lang.OutOfMemoryError: PermGen spaceat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)at java.lang.ClassLoader.defineClass(ClassLoader.java:615)... 8 more
以上是在JDK1.6下运行的结果,我用1.8则只会循环地输出"hi"而不报错,可能是垃圾回收机制改良了
阅读全文
0 0
- 【JVM】4_利用GCLib测试方法区溢出
- 【JVM】5_测试直接内存溢出
- 【JVM】2_测试虚拟机栈和本地方法栈溢出
- 【JVM】1_测试堆内存溢出异常
- JVM性能测试与内存溢出
- 方法区内存溢出测试
- jvm 内存溢出问题排查方法
- 请问JVM参数_定位检查内存溢出问题
- JVM进阶(四)——利用MAT排查堆溢出
- JVM进阶(四)——利用MAT排查堆溢出
- 持久区jvm堆内存溢出原因
- 方法区溢出
- Java方法区溢出
- JVM学习笔记-虚拟机栈和本地方法栈溢出
- jvm 内存溢出的多种原因及优化方法
- 方法区溢出+直接内存溢出
- 利用反射测试私有方法
- 方法栈和本地方法栈内存溢出异常测试
- <包法利夫人>读后感
- 『0009』
- 算法设计:字典序问题
- implicitlywait
- 个人环境搭建——搭建jenkins持续构建集成环境
- 【JVM】4_利用GCLib测试方法区溢出
- 冒泡排序:python
- 【leetcode】搜索范围(二分查找升序数组target元素上下界)
- Linux驱动修炼之道-SPI驱动框架源码分析(上)
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- VC14(VC2015)安装失败,0x80240017
- a64_7.1-v3.1android拉伸绘制矩形区域距离默认平板外边界问题
- 『0011』
- android之获取七天后的时间