浅谈java虚拟机|系列1|架构简介

今天开了一个专题。谈谈我们java程序员每天面对的java虚拟机(jvm)。

本质上来说,jvm分两部分:编译器(compiler)和运行时(runtime)。

所谓的编译器,简单来说,他就是个翻译机,就像人类世界中的英语翻译,打个比方,英语翻译,他主要的工作是把中文翻译成英文。

而编译器,它主要的工作是把程序员写的java代码(就像:中文)翻译成class文件(就像:英文)。就像是一个程序员与虚拟机的翻译者。

而运行时,它主要就是一个执行机器,简单来说,它就是加载class文件,并把它翻译成更底的汇编语言和机器码,并根据程序逻辑调用底层操作系统的函数,来完成程序运行。

那编译器的原理,又是怎么样的呢?

简单来说,它包含两部分:词法分析器和语言分析器。

什么是词法分析器?

词法分析(lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。

简单来说,它就是要把java程序代码,转换成token序列。也就是说,它是语法分析器的翻译者。

什么是语法分析器?

在计算机科学和语言学中, 语法分析(英:Syntacticanalysis,也叫Parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的 输入文本进行分析并确定其语法结构的一种过程。
语法分析器(Parser)通常是作为 编译器解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、 抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的 词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具(半)自动生成。
简单来说,它就是接受词法分析器的token序列,并转成AST(抽象语法树),并对AST进行操作,从而最终产生虚拟机运行时(runtime)的执行码,也就class文件。
一句说来说,词法分析器是语法分析器的翻译者,而词法分析器和语法分析器组成的编译器,是运行时(runtime)的翻译者。
我们用一幅图来说明程序员与编译器,运行时的关系:

 上图,已经很好说明各方的关系,程序员写java代码,编译器把java代码编译成class文件,运行时加载并执行class文件,并通过调用操作系统函数来完成相关任务。
 以上,就是java虚拟机的简单架构介绍。
下篇继续谈谈架构的细节部分。
 
 

猜你喜欢

转载自www.cnblogs.com/gyc567/p/11071712.html
今日推荐