一.多核cpu运行模型
二.Jvm内存模型
1. 2简化版内存模型:
1. 黄色区域(方法区 & 堆)是线程间共享的
2. 蓝色区域是线程独享的
2. 方法区:
-
静态常量池:存储类的元数据信息;eg:版本,规范
-
运行时常量池:
-
字符串常量池
-
基本类型的封装类的常量池(不包含浮点类型Float & Double)
-
在jdk1.8中,元空间已经变为直接内存,即计算机内存
-
-
面试题:String test = new String("carString");请问“aaa”创建了几次
-
在类加载阶段创建“aaa”,放入字符串常量池中
-
-
在运行时创建test对象,在字符串常量池中查找“aaa”,将其copy到堆内存中
-
-
答案:2次
-
程序计数器:用来记录虚拟机字节码指令的地址(不能看到native的方法)
-
本地方法栈:是为虚拟机使用到的Native方法提供服务;线程私有
-
Jvm虚拟机栈:线程私,每个线程进入一个方法,都会我那个Jvm虚拟机栈中压入一个栈帧
-
栈帧数据结构如下:
-
局部变量表:存储局部变量&方法的参数
-
操作数栈:记录运算操作数
-
动态链接:符号引用变成直接引用(多态、以及父类子类的cse中,类加载阶段是无法将符号引用变味直接引用,所以在运行时赋值)
-
返回地址:方法返回的结果&跑出的异常 对象的地址
-
即时信息:一个方法在虚拟机中不同版本带来的不同信息
-
-
动态链接、返回地址、即时信息 -> 栈帧信息
-
-