JVM内存模型

作者: 齐晋 | 来源:发表于2017-04-13 11:54 被阅读123次

    内存模型

    五大区域

    1. 程序计数器(PC)
    2. 虚拟机栈
    3. 本地方法栈
    4. 方法区(包含常量池)


    详细介绍

    1. 程序计数器

    程序计数器 ,简称PC(Program Counter Register)

    内容

    • 存储要运行的字节码地址

    特点

    • 线程私有,每个线程都有一个PC
    • 当执行一个方法时,PC中存储的是要执行的字节码地址
    • 当执行一个本地方法时,PC为空

    异常

    • 唯一一个不会发送OutOfMemory的区域

    2. 虚拟机栈

    Java Virtual Machine Stacks

    内容

    • 局部变量
    • 函数调用返回地址

    特点

    • 线程私有
    • 声明周期与线程相同

    异常

    • StackOverflow: 栈深度过大
    • OutOfMemory: 内存溢出

    3. 本地方法栈

    Native Method Stack
    Native Method是指由非Java编写的代码

    内容

    • Native方法的变量

    特点

    • 有些虚拟机将本地方法栈与虚拟机栈合二为一(如HotSpot)

    异常

    • StackOverflow: 栈深度过大
    • OutOfMemory: 内存溢出

    4. 方法区

    Method Area

    内容

    • 类信息
    • 常量、静态变量
    • 编译后的代码

    特点

    异常

    • OutOfMemory: 内存溢出

    5. 堆

    Heap

    内容

    • new出来的对象

    特点

    • JVM管理的最大一块内存,也是GC主战场
      分为新生代和老年代

    异常

    • OutOfMemory: 内存溢出
      ·

    OOM (OutOfMemory)

    Stack Overflow

    一个Stack Overflow例子

    public class Main {
    
        private int size = 1;
    
        public void stackLeak(){
            size++;
            stackLeak();
        }
        public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
            Main gg = new Main();
            try{
                gg.stackLeak();
            }catch(Throwable e){
                System.out.println(gg.size);
                throw e;
                //e.printStackTrace();
            }
    
        }
    }
    

    参考

    相关文章

      网友评论

        本文标题:JVM内存模型

        本文链接:https://www.haomeiwen.com/subject/ntrbattx.html