jvm运行时内存模型
堆
存放的是 新创建出来的对象。这一块对jvm性能影响很大,垃圾回收机制也是在一块进行处理的。
线程栈
每一个线程都有一个单独的线程栈,当cpu调用某一个线程的时候,会给这个线程分配一块内存,一个线程会根据这个class 不同的方法会有不同的栈帧,jvm只能压入和弹出栈帧两种操作,当调用一个方法的时候压入栈帧方法结束时弹出栈帧
栈帧
每一个方法都有自己的栈帧,栈帧内又分布操作数栈、局部变量表、动态链接、方法出口
- 局部变量表,就是存的是每一个变量的值,
- 操作数栈 就是将局部变量的值进行操作之后再返回出去,例如 test()
当然真实的jvm里面不是这个样子
a=1 b=1还有 a*b+a 都是jvm指令
3.动态链接存放的是程序在运行的过程中方法对应的指令码地址
4,方法出口,程序快结束时最后的出口
本地方法栈
当调用到c或者c++的代码时候会用到本地方法栈
程序计数器
存放指令的的地址的地方
方法区
存放静态常量,常量,类元信息 jdk1.8之后叫元空间且使用的是直接内存, 之前叫永久代