jvm设置堆内存参数 java heap space解决方法( 二 )


Exception in thread "main" java.lang.OutOfMemoryError: Java heap space5、方法区,是所有JVM共享的区域,存储了跟类的结构相关的信息:运行时常量池,类的成员变量,方法数据,以及成员方法和构造器方法的代码等 。方法区是在JVM启动时被创建的,可以通过-XX:MaxMetaspaceSize=10m设置方法区的大小 。下图就是JDK1.8中的内存结构:
可以看到,Metaspace作为方法区的实现,包含了Class、ClassLoader和常量池 。方法区也会有内存溢出,即元空间的内存溢出:
public class Demo1_5 extends ClassLoader{public static void main(String args[]) {try {Demo1_5 test = new Demo1_5();//加载10000个新的类for (int i=0; i<10000; i++) {//生成类的二进制字节码ClassWriter cw = new ClassWriter(0);//参数含义:版本号,public,类名,包名,父类,接口cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Class"+i, null, "java/lang/object", null);//返回类的byte数组byte[] code = cw.toByteArray();//执行类的加载test.defineClass("Class"+i, code, 0, code.length);}}catch (Exception e) {e.printStackTrace();}}}上述案例演示了加载的类数量过多导致元空间内存溢出,以下是运行后结果:
Error occurred during initialization of VMMaxMetaspaceSize is too small.


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: