什么是JVM ?

本文详细解析JVM(Java虚拟机)的构成与工作原理,包括类加载器子系统、运行时数据区及执行引擎,阐述类加载过程及JVM、JDK、JRE的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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年的爬坑历程。感觉分享很给力的话给个赞,谢谢!!!有问题也可以下方留言沟通。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值