吃透JVM篇(1)-JVM包含什么,如何运行的代码

目录

吃透JVM篇(1)-JVM包含什么,如何运行的码
吃透JVM篇(2)-class字节码里都是啥
吃透JVM篇(3)-jvm的classLoader和android的classLoadder

为啥写这篇文章

android面试老被问到JVM,回答老是含糊不清,既然如此,那就吃透它,到底有什么,都是干啥的

JVM是什么,都有啥?

Java Virtual Machine(VMware的VM也是这两个单词)本质是一个程序,主要用来将java的字节码翻译成不同平台硬件指令用的
大体按照模块划分可以分为下面四个

1、类装载器(classLoader)
2、运行时数据区(运行时存放的堆,方法等等)
3、本地方法接口(不同平台提供好的方法指令)
4、执行引擎(直接将指令集转化为机器语言)

一段java代码如何通过jvm运行在不同平台上?

首先java代码通过类编译器(javac)变成class文件,这个过程大约分为以下几个步骤

1词法分析

就是一个字符一个字符的读,将每个字符转化为标记序列(关键字、类名等,粗暴的理解可以是将一坨字母分割成一个一个词),主要是判断每个单词是否符合规范

2语法分析

将上面生成的词语连起来变成一个个短语,看看是否符合可以使用的句子,主要用来判断单条语句是否成立

3语义分析

主要用来分析该语句是否符合java逻辑,比如布尔变量用字符去接

4编译成jvm可识别的.class文件

该步骤主要将上述的符合语法的文件通过对应的字节转化方式转化成字节码,具体转化关系可以看这篇文章从一个class文件深入理解Java字节码结构
至此class文件编译完毕,此过程叫 前编译阶段

5通过类加载器加载

这里面学问多了,面试里的双亲加载啊,热修复的考点都在这里后面会详细了解,这里可以粗暴的理解有一个class阅读器,能把.class文件的东西读出来,塞给jvm运行时数据区

6字节码效验

classLoader读出来得class塞到运行时区域,然后在将执行的方法放入虚拟机栈时有一坨逻辑判断,检查下这坨字节码有没有问题,包含下面几个事情(详细参考这篇文章
c1) 变量要在使用之前进行初始化;
c2)方法调用与对象引用类型间要匹配;
c3)访问私有数据和方法的规则没有被违反;
c4)对本地变量的访问都落在运行时堆栈内;
c5)运行时堆栈没有溢出

7虚拟机栈执行出入栈(运行.class的代码)

详细看这篇文章

8将执行的栈帧通过执行引擎转化为机器语言

这里主要是解释器和jiT干的事情了,主要就是转成平台机器可识别语言,比如发出声音啊,屏幕展示像素点啊,这些机器语言最终就是用户通过五官感受到的信息了
至此所有代码就运行完毕了,这个流程又叫做 后编译阶段,后编译阶段只要在第8步,可以看看这篇文章理解
由于前三步对于开发的作用不大,下篇文章开始探究第4步.class字节码和代码的逻辑关系

Android中的JVM是什么?

(4.4以前)

在android中专门对android设备定制了一套运行java代码的虚拟机dvm

android虚拟机和JVM有什么区别?

1主流jvm是加载class文件,而dalvik是加载dex文件
2jvm是把每个class的加载方法放在运行区的虚拟栈里,而dvm是将方法放在寄存器里的,寄存器对容量有个限制,最大65535,这个东西也是当方法体多了以后,打包失败,需要分包的元凶。
3 dvm在有限内存中有多个进程,而且在android中所有的dvm都是由第一个dvm-zygote自身fork出来的
4dvm有共享机制,不同的dvm之间可以共享相同的类
5android2.2以前没有jit,后来加上了

class文件和dex文件又有什么区别?

1、dex将class中冗余的信息进行了整合,例如
每个单独的class都会存储常量信息,哪怕两个class其实使用的是一个常量,而dex将两个储存信息合并成一个
2、class存储的是栈帧信息,dex存储的是寄存器信息。

(4.4以后)

4.4以后,为了适配64位cpu顺便增快app运行速度发明了ART(android run time)

ART和DVM有什么区别?

首要要说明的是由于ART和DVM都装载的是dex,所以所有的代码执行都是基于寄存器的,唯一不同是将代码翻译过程由运行时前置到了安装时(AOT-aHead-of-time)-官方说明上一波
大体解释下
DVM在安装时并没有将指令集翻译成机器码,安装过程可以理解为一个解压过程,在运行时才会翻译机器码,所以app越大,打开越慢
ART在安装时有个AOT编译,会将指令集全部翻译成机器码,然后存储,后来拉进JIT,去掉了常用字节码编译,加快了安装速度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容