JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
本文按照自己个人理解,去编写,如有需要修改的请下方留言。
在写之前,需要先了解下两个问题:
1、大家都知道 JVM 是跨平台的,但是想问下大家 C、C++ 是不是跨平台的?
当然,答案是肯定的。因为C、C++写出来的程序可以在 Windows 和 Mac 上运行,所以也是跨平台的。
那么,JVM 是跨平台的,也无需解释了。
2、JVM、JDK、JRE 的区别?
JVM 是 Java 虚拟机,JDK 是编译时期环境,JRE 是运行时环境。
以后面试官问到这个问题,大家就可以这么回答,下面也会详细介绍编译时期和运行时是在什么时候。
接下来说今天的正题:
A、JVM 的构成
a、类加载器子系统:Class文件编译的过程在此子系统执行
b、运行时数据区:编译好的字节码加载到内存中(运行时数据区)
c、执行引擎:加载后需要运行,就要用到执行引擎
B、类加载过程:
b、运行时数据区
JVM 可以识别字节码文件(class 文件),然后将字节码文件读取到内存。
运行时数据区包括:线程共享区、线程独占区。
如下图所示,绿色表示线程共享区,黄色表示线程独占区(也叫私有区)
运行时数据区:线程共享区、线程独占区
线程共享区:堆、方法区
线程独占区:虚拟机栈、本地方法栈、程序计数器
程序计数器:指向当前线程所执行的字节码指令的行号
一个程序正常的执行流程是:程序 -- > CPU -- > 线程 -- > 运行 -- > JVM 指令(字节码指令)
C、最后说下,Java 魔数 不知道大家晓得不?
每个编译过的 class 文件打开之后前缀都是 “漱壕”,知道是为什么吗?
将 .class 文件转换成 ASCII 格式后,显示的是 ca fe ba be
cafe babe 表示的是 Java 的 LOGO,就表示的是一个咖啡杯。
我是进阶的球儿,大家一起2019年的爬坑历程。感觉分享很给力的话给个赞,谢谢!!!有问题也可以下方留言沟通。