把java文件加载成class文件的过程 1.验证 (看是不是java文件)2.准备(给静态变量赋初始值,跟我们赋的值无关,只跟类型有关)
3.解析 4.初始化 5(把磁盘的java文件(源文件)丢进jvm)
1.验证
2.准备
问题:如果static变量前面加final 也是在准备的时候赋值为默认值吗
答:在准备的时候不复制
类加载过程
进入命令终端:
语言无关性(跨无言):因为作为jvm不识别java语言还是什么scale语言等,只识别class文件(也就是字节码),语言只是一个规范
JVM内存结构
虚拟机栈(方法的入栈和)出栈
局部变量表 存局部变量和对象的引用
虚拟机栈为什么有操作数栈勒?
答:执行引擎在执行字节码的中间是有一些数据需要放在放在操作数栈的,类似于cpu
主内存缓存的架构
程序计数器的作用:
jvm类似于一个操作系统
对于操作系统:cpu时间片轮转机制,比如 线程a执行到13行 将要被阻塞或者挂起,线程b来执行,线程b执行完了,线程a从13行往下执行,所以要用程序计数器记录执行的行号,
jvm程序计数器跟操作系统的程序计数器其实是一个映射关系
程序计数器在jvm内存中唯一不会oom的 因为他只是计数
虚拟机有多个方法为啥不需要多个程序计数器勒?
是因为一个线程不可能同时执行多个方法