什么是JVM ?

180 阅读2分钟

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、执行引擎:加载后需要运行,就要用到执行引擎

image.png

B、类加载过程:

image.png

b、运行时数据区

  JVM 可以识别字节码文件(class 文件),然后将字节码文件读取到内存。

  运行时数据区包括:线程共享区、线程独占区。

如下图所示,绿色表示线程共享区,黄色表示线程独占区(也叫私有区)

image.png

运行时数据区:线程共享区、线程独占区

线程共享区:堆、方法区

线程独占区:虚拟机栈、本地方法栈、程序计数器

程序计数器:指向当前线程所执行的字节码指令的行号

    一个程序正常的执行流程是:程序 -- > CPU -- > 线程 -- > 运行 -- > JVM 指令(字节码指令)

C、最后说下,Java 魔数 不知道大家晓得不?

image.png

每个编译过的 class 文件打开之后前缀都是 “漱壕”,知道是为什么吗?

将 .class 文件转换成 ASCII 格式后,显示的是 ca fe ba be

cafe babe 表示的是 Java 的 LOGO,就表示的是一个咖啡杯。

image.png

我是进阶的球儿,大家一起2019年的爬坑历程。感觉分享很给力的话给个赞,谢谢!!!有问题也可以下方留言沟通。