标签:字节 语言 内存 局部变量 -- 运行时数据区 深度 def 信息
1、程序计数器
1.1 一块较小的内存空间、可以看作是当前线程所执行的字节码的行号指示器;
1.2 在JVM的概念模型中,字节码解释器的作用:通过改变程序计数器的值来选取下一条需要执行的字节码指令(分支、循环、异常处理、线程恢复等基础功能
都需要依赖程序计数器来实现);
1.3 JVM的多线程实现方式:
通过线程轮流切换 并分配处理器执行时间
为了线程切换后能恢复到正确的执行位置,每个线程必须有独立的程序计数器,各计数器独立存储、互不影响;
1.4 如果线程执行的是一个Java方法,程序计数器中记录的是正在执行字节码指令的地址;
如果线程执行的是一个native方法,程序计数器的值为空(undefined);
1.5 生命周期同线程;
2、Java虚拟机栈
1.1 生命周期同线程;
1.2 描述的是Java方法执行的内存模型:
每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、方法出口等信息;
每个方法从调用到执行完成,对应着一个栈帧在Java虚拟机栈中入栈到出栈的过程;
1.3 在JVM规范中,对Java虚拟机栈规定了2种异常情况:
如果线程请求的栈深度大于JVM所允许的深度,则抛出StackOverflowError异常;
如果栈可以动态扩展,扩展时无法申请到足够的内存,则抛出OutOfMemoryError异常;
3、本地方法栈
1.1 生命周期同线程;
1.2 作用:为虚拟机用到的native方法服务;
1.3 在JVM规范中,对本地方法栈中方法的使用语言、使用方式、数据结构没有做强制要求,具体的虚拟机可以自由实现它,
甚至有的虚拟机直接将Java虚拟机栈和本地方法栈合二为一;
1.4 同Java虚拟机栈规定了StackOverflowError异常、OutOfMemoryError异常;
4、Java堆
1.1 生命周期同进程;
1.2 被所有线程共享;
1.3 作用:存放对象实例;
1.4 又称“GC堆”
1.5 在JVM规范中,如果没有多余内存分配对象实例,并且堆也无法扩展,抛出OutOfMemoryError异常;
5、方法区
1.1 生命周期同进程;
1.2 被所有线程共享;
1.3 用于存储已被虚拟机加载的类信息、常量、静态变量等数据;
1.4 在JVM规范中,当方法区无法满足内存分配需求时,抛出OutOfMemoryError异常;
标签:字节 语言 内存 局部变量 -- 运行时数据区 深度 def 信息
原文地址:https://www.cnblogs.com/anpeiyong/p/10365877.html