虚拟机运行时区域

栈是线程独有的,不需要gc,方法区和元数据空间堆是线程共享的,需要gc.

内存溢出实战

1.java堆内存溢出:

package com.test1;

import java.util.ArrayList;
import java.util.List;

/**
 * -Xms5M  -Xmx5M -XX:+PrintGCDetails -verbose:gc
 * @author Administrator
 *
 */
public class TestHeap {

    public static void main(String[] args) {
        List <Object> list =new ArrayList<>();
        int i = 0 ;
        while(true){
            if(i % 10000 == 0)System.out.println("i = " + i);
            list.add(new Object());
            i++;
        }
    }
}

2.方法区和运行时常量池溢出:

package com.test1;

import java.util.LinkedList;
import java.util.List;

/**-XX:MaxMetaspaceSize=3M   jdk1.8
 * -XX:PermSize=4k -XX:MaxPermSize=4k    jdk1.7
 * @author Administrator
 *
 */
public class TestHeap {

    public static void main(String[] args) {
        List<Object> list = new LinkedList<>();
    }

}

报错信息:Error occurred during initialization of VM
Too small initial permanent heap


3.虚拟机栈和本地方法栈溢出:

package com.test1;

/**
 * -Xss256k
 * @author Administrator
 *
 */
public class TestVMStack {

    private int length = 1;
    private void diGui(){
        int x = 0;
        int y = 1;
        length ++;
        diGui();
    }
    public static void main(String[] args) {
        TestVMStack test = new TestVMStack();
        try {
            test.diGui();
        } catch (Throwable e) {
            // TODO: handle exception
            System.out.println(" length" + test.length);
            e.printStackTrace();
        }
    }
}
报错信息:报错信息:
java.lang.StackOverflowError
    at com.test1.TestVMStack.diGui(TestVMStack.java:14)
    at com.test1.TestVMStack.diGui(TestVMStack.java:15)
    at com.test1.TestVMStack.diGui(TestVMStack.java:15)
    at com.test1.TestVMStack.diGui(TestVMStack.java:15)
    at com.test1.TestVMStack.diGui(TestVMStack.java:15)
    at com.test1.TestVMStack.diGui(TestVMStack.java:15)
    at com.test1.TestVMStack.diGui(TestVMStack.java:15)

4.本机直接内存溢出:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值