jvm内存模型
整体来说分为 三层,
第一层 类加载子系统
第二层 运行时数据区
第三层 执行引擎、本地接口/本地方法库
我们常常关注的就是这个运行时数据区 主要分为五个部分
分别是: 堆、方法区、本地方法栈、虚拟机栈和程序计数器
这其中堆和方法区是线程共享的
而本地方法栈、虚拟机栈和程序计数器则是线程私有的
这五部分最常关注的又是这个虚拟机栈
虚拟机栈在每个方法执行时都会拥有一个独立的栈帧,这个栈帧中存储着方法局部变量、操作数栈、动态链接、方法出口等
堆是JVM内存占用最大管理最复杂的一个区域 一般分为两个区域 新生代和老年代 新生代一般占用堆空间的1/3,老年代占用2/3
其中新生代一般又分为两个区域,占新生代8/10的Eden区和2/10的survivor区,这里survivor一般又分为两个部分,各占整个Eden区1/10的from和to区域
方法区、永久代元空间演变过程 参考:https://www.cnblogs.com/jklixin/p/13457936.html
方法区、永久代与元空间的概念
方法区、永久代与元空间,在某些特定场景下,表述者想表达的可能是一个意思,但是从本质上来说还是有很大区别的
首先 方法区实际上是《java虚拟机规范》定义的一个规范,方法区