1、JVM内存模型
- 图示:
①程序计数器:记录行号
②虚拟机栈:记录指针的集合
栈帧里面保存的就是 方法 执行的必要参数和执行条件。
赋值号 ‘=’ 就是 改变了 这个局部变量的 地址
JVM虚拟机栈的 栈帧 分为:
局部变量区
操作数栈
动态链接
方法的返回地址
③本地方法栈:为虚拟机所使用的native方法服务,native方法是java通过JNI直接调用c/c++库 。
④方法区(非堆)(真正的对象,变量都存在方法区里面):里面还有 运行时的方法常量池,包含(永久代,JDK1.8之后叫元数据区)
永久代:存放在JVM的虚拟内存
元数据区:存放在计算机的内存,相对于虚拟内存来说容量更大,不易溢出
⑤堆(里面存的都是实例化对象,对象中存放的是对象地址,这个地址指向方法区):用new 关键字创建的对象
线程独有的:
每一个线程都有一个自己的程序计数器
栈:是对于 线程 的概念,每个线程有自己的栈
栈 分为 虚拟机栈 和 本地方法栈
加锁应该加在 堆里面。
线程共享的:
堆 和 方法区(这里有可能也叫非堆)