【JVM】自动内存管理机制

一、Java虚拟机运行时数据区

   1、 程序计数器:当前线程(->线程私有)所执行的字节码的行号指示器。

    当前线程正在执行的是一个Java方法,则计数器记录的是正在执行的虚拟机字节码指令的地址;

    当前线程正在执行的是一个native方法,则计数器值为空;

    此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。


    2、Java虚拟机栈:是描述Java方法执行(->线程私有)的内存模型(每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口灯信息),每个方法从调用到执行完成的过程,都是对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

    局部变量表:存放编译期可知的各种基本数据类型(如boolean等)、对象引用(reference类型,为指向对象起始地址的引用指针,或指向一个代表对象的句柄或其他与此对象相关的位置)、returnAddress类型(为指向了一条字节码指令的地址);;且64位长度的long和double会占用2个局部变量空间(Slot),其余只占用1个

    StackOverflowError异常:当线程请求的栈深度大于虚拟机所允许的深度时抛该异常

    OutOfMemoryError异常:如果虚拟机栈可以动态扩展,且扩展时无法申请到足够的内存时抛该异常


    3、本地方法栈:相较于Java虚拟机栈(Java方法)而言,是为虚拟机使用到的Native方法服务的;同样,抛StackOverflowError和OutOfMemoryError异常






猜你喜欢

转载自blog.csdn.net/zorkeaccount/article/details/80671095
今日推荐