安卓系统开发之JVM虚拟机

本文详细介绍了JVM的相关概念,包括JDK与JRE的区别,JVM的作用,以及编译Java文件的步骤。重点讲解了JVM运行时数据区,如方法区、堆、虚拟机栈、本地方法栈和程序计数器,特别是类加载机制中的双亲委派模型。此外,还探讨了栈帧、对象在内存中的存储以及垃圾收集器的分类。
摘要由CSDN通过智能技术生成

JVM

JDK,JRE,JVM之间的关系

JVM1.8的官网https://docs.oracle.com/javase/8/

JDK 8是JRE 8的超集,包含JRE 8中的所有内容,以及开发小程序和应用程序所需的工具,例如编译器和调试器。 JRE 8提供了库,Java虚拟机(JVM)和其他组件,以运行用Java编程语言编写的小程序和应用程序。 请注意,JRE包含Java SE规范不需要的组件,包括标准和非标准Java组件。

以下概念图说明了Oracle Java SE产品的组件:

在这里插入图片描述
比如:java运行程序,javac可以编译,javadoc可以生成技术文档;从这张图上就能看出,JDK其实就是比JRE多了一层Tools&Tool APIs,而这一层中就包含了开发小程序和应用程序所需的工具,比如编译器,调试器等;

JDK多包含的那一层,可以这么去理解,JRE是我们的运行环境,如果我们的程序需要运行,则需要运行在拥有JRE的环境中,如果既要开发还要运行则需要JDK;

为什么需要学习JVM?

​ Java程序之所以能够一次编译到处运行,就是得益于JVM实现了与各大平台之间的连接,而我们只需要将编译好的class文件交给JVM即可,所以我们需要知道JVM到底是如何来加载和管理class文件的,这样有助于我们了解写的每一行Java代码背后的代码逻辑,从而提高我们对程序的把控性。

编译java文件宏观原理(大致了解即可)

在这里插入图片描述

编译可以分为五个基本步骤:词法分析、语法分析、语义分析 及中间代码的生成、优化、目标代码的生成。这是每个编译器都必须的基本步骤和流程, 从源头输入高级语言源程序输出目标语言代码。

1 词法分析

词法分析器是通过词法分析程序对构成源程序的字符串从左到右的扫描, 逐个字符地读, 识别出每个单词符号, 识别出的符号一般以二元式形式输出, 即包含符号种类的编码和该符号的值。词法分析器一般以函数的形式存在, 供语法分析器调用。当然也可以一个独立的词法分析器程序存在。完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。

2 语法分析

语法分析是编译过程的第二个阶段。这阶段的任务是在词法分析的基础上将识别出的单词符号序列组合成各类语法短语, 如“语句”, “表达式”等.语法分析程序的主要步骤是判断源程序语句是否符合定义的语法规则, 在语法结构上是否正确。而一个语法规则又称为文法, 乔姆斯基将文法根据施加不同的限制分为0型、1型、2型、3型文法, 0型文法又称短语文法, 1型称为上下文有关文法, 2型称为上下文无关文法, 3型文法称为正规文法, 限制条件依次递增。

3 语义分析

词法分析注重的是每个单词是否合法, 以及这个单词属于语言中的哪些部分。语法分析的上下文无关文法注重的是输入语句是否可以依据文法匹配产生式。那么, 语义分析就是要了解各个语法单位之间的关系是否合法。实际应用中就是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查等。

4 中间代码生成与优化

在进行了语法分析和语义分析阶段的工作之后, 有的编译程序将源程序变成一种内部表示形式, 这种内部表示形式叫做中间语言或中间表示或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统, 这种记号系统复杂性介于源程序语言和机器语言之间, 容易将它翻译成目标代码。另外, 还可以在中间代码一级进行与机器无关的优化。

5 目标代码的生成

根据优化后的中间代码, 可生成有效的目标代码。而通常编译器将其翻译为汇编代码, 此时还需要将汇编代码经汇编器汇编为目标机器的机器语言。

6 出错处理

编译的各个阶段都有可能发现源码中的错误, 尤其是语法分析阶段可能会发现大量的错误, 因此编译器需要做出错处理, 报告错误类型及错误位置等信息。

通过javac编译java文件

在这里插入图片描述
在这里插入图片描述

如上两张图所示,通过javac命令将MNBean.java文件编译成MNBean.class文件。

class文件解读

官网class file解读地址:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.1

在这里插入图片描述
上图为官方定义的ClassFile文件结构以及通过sublime打开MNBean.class文件(sublime支持16进制格式查看)

文件解读

1:u4代表8个16进制位。u4就相当于cafe babe;

​ u4后跟的magic代表:The magic item supplies the magic number identifying the class file format; it has the value 0xCAFEBABE.(官网定义)

​ 它代表的是class文件的一个开头的格式;只要是class文件,都是以cafe babe开头。

2:u2代表 0000

3:第3个u2代表 0034

依此类推;(具体的表述可以参考下方代码块内容,大概了解即可,不需要熟记)

struct ClassFile
{
   

      u4 magic;                    //Class文件格式起始标识,具体值为0xCAFEBABE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值