JVM核心概念
为什么java代码可以实现run everywhere?
java代码编译成字节码文件(.class),交给JVM,由JVM翻译成机器码从而在操作系统上实现。不同的操作系统对应不同的JVM,所以从宏观上看JVM屏蔽了各自操作系统的差异性
内存区域 与 内存模型
1. 内存区域
JVM将内存区域划分为:方法区(元空间取代,占用内存)、堆、虚拟机栈、本地方法栈、程序计数器
2. JVM内存模型
Java Memory Model,简称JMM
用于定义程序中变量的访问规则,即:在JVM中如何将变量存储到内存,以及如何从内存中获取变量(此处的变量指的是所有线程共享的变量)
与JVM内存区域不同,JMM从使用角度对内存进行划分:主内存、工作内存
JMM规定所有的变量都存储在主内存中,每个线程都拥有一个自己的工作内存
工作方式:从主内存中读取变量,写入工作内存,工作内存处理完成后,再将变量重新写回主内存