标签:eth 使用 即时编译 out 申请 内存区域 结构 虚拟机启动 服务
线程共享,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;
这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载,一般来说这个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收确实是有必要的。
根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
程序计数器是当前线程执行的字节码的行号指示器。
程序计数器占用一块较小的内存,线程私有。
因为Java虚拟机的多线程是通过线程切换获得CPU执行时间来执行的。每个处理器只会处理一条线程,为了处理器切换线程时能回到之前所执行的位置,每个线程都要有一个 程序计数器,记录当前线程执行的字节码的位置。所以是线程私有的。
此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
线程私有。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。
每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
StackOverflowError:线程申请的栈内存过大;
OutofMemoryError:栈内存不够时。
与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。
与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError和OutOfMemoryError异常。
标签:eth 使用 即时编译 out 申请 内存区域 结构 虚拟机启动 服务
原文地址:https://www.cnblogs.com/Samuel1/p/9871943.html