浅谈 JVM
话不多说,先上图
方法区(元空间)
在jdk1.8之前,叫做永久代,之后改名为元空间(Meta Space)。存放类元信息、静态变量、常量。
虚拟机栈
栈是线程私有的。生命周期随线程生而生,亡而亡。线程每调用执行一个方法,都会压入一个栈帧,方法执行完毕,就弹出栈帧。(当然了,并不能无禁止的一直压入栈帧)
局部变量表
顾名思义,存储方法参数、方法内定义的局部变量
操作数栈
通过相关指令对局部变量进行各种操作
动态链接
将符号引用变成直接引用
方法出口
就是方法执行完了后线程要去哪里执行呢?方法出口就存储了这个位置
程序计数器
也是线程私有的区域,每个线程都会分配计数器的内存,用来存放当前线程正在运行或者将要运行的JVM指令码对应的地址,或者说行号位置
堆
堆是运行时数据区最重要的一块内存区域。也就是常说的存放对象的区域了。
堆由新生代和老年代组成,新生代又分为Eden
区和Survivor
区,其中Survivor
区又分为from
区和to
区。
new
出来的新对象一般都存在Eden
区。那为什么要在这个区域呢,Eden
就是伊甸园的意思,这么说就很明了了吧。
再来个堆区域组成图
作者:超级鲨鱼辣椒
转载请注明原文链接:https://www.cnblogs.com/jinzlblog/p/15102270.html