Android面试题——JVM

Android平台的虚拟机是基于栈的吗?

Android面试题——JVM_第1张图片
Android面试题——JVM_第2张图片

JVM运行时数据区

Android面试题——JVM_第3张图片

运行时栈

Android面试题——JVM_第4张图片

基于栈的虚拟机

Android面试题——JVM_第5张图片
Android面试题——JVM_第6张图片
第0行表示将一个Int型的1推送至操作数栈栈顶,程序计数器指向第0行。第一行字节码表示将栈顶的int型数值存入第一个本地变量,这两行代码就进行了给局部变量赋值的操作,第二三行同理。第4、5行表示将局部变量表的数入栈,第六行表示将栈顶两int型数值相加并将结果压入栈顶。第七行表示将单字节常量(-128~127)9推送至栈顶,因为这个字节占用两个字节码单元,所以下一行的行号是 9。9表示将栈顶两个数相乘并放入栈顶,第a行表示将栈顶的数存入本地变量。从这些操作我们可以看出都是操作操作数栈的。

Dalvik虚拟寄存器

JVM基于栈则意味着需要去栈中读写数据,所需的指令会更多,这样会导致速度变慢,对于性能有限的移动设备,显然不是很适合的。DVM是基于寄存器的,它没有基于栈的虚拟机在复制数据时而使用的大量的出入栈指令,同时指令更紧凑、更简洁。但是由于显式指定了操作数,所以基于寄存器的指令会比基于栈的指令要大,但是由于指令数量的减少,总的代码数不会增加多少.
Android面试题——JVM_第7张图片
Android面试题——JVM_第8张图片

Android面试题——JVM_第9张图片
Android面试题——JVM_第10张图片
Android面试题——JVM_第11张图片
Android面试题——JVM_第12张图片

各自特点

Android面试题——JVM_第13张图片

如何看待基于栈的虚拟机?

Android面试题——JVM_第14张图片
Android面试题——JVM_第15张图片
Android面试题——JVM_第16张图片

如何看待基于寄存器的虚拟机

Android面试题——JVM_第17张图片

为什么dex文件比class文件更适合移动端

Android面试题——JVM_第18张图片

Android面试题——JVM_第19张图片
Android面试题——JVM_第20张图片

class文件结构

Android面试题——JVM_第21张图片
在这里插入图片描述
· u1:1字节,无符号类型。
· u2:2字节,无符号类型。
· u4:4字节,无符号类型。
· u8:8字节,无符号类型。

文件头

Android面试题——JVM_第22张图片

常量池

Android面试题——JVM_第23张图片
Android面试题——JVM_第24张图片
Android面试题——JVM_第25张图片
Android面试题——JVM_第26张图片
Android面试题——JVM_第27张图片
Android面试题——JVM_第28张图片

类信息

Android面试题——JVM_第29张图片

字段表

Android面试题——JVM_第30张图片

方法表

Android面试题——JVM_第31张图片
Android面试题——JVM_第32张图片
在这里插入图片描述

属性信息

Android面试题——JVM_第33张图片

dex文件

Android面试题——JVM_第34张图片

class文件 vs dex文件

在Java SE程序中,Java类被编译成一个或多个.class文件,并打包成jar文件,而后JVM 会通过相应的.class 文件和jar 文件获取相应的字节码。执行顺序为.java 文件→.class文件→.jar文件,而DVM会用dx工具将所有的.class文件转换为一个.dex文件,然后DVM会从该.dex文件读取指令和数据。执行顺序为.java文件→.class文件→.dex文件。
jar文件里面包含多个.class文件,每个.class文件里面包含了该类的常量池、类信息、属性等。当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,JVM的这种加载方式很慢,对于内存有限的移动设备并不合适。而在.apk文件中只包含了一个.dex文件,这个.dex文件将所有的.class里面所包含的信息全部整合在一起了,这样再加载就加快了速度。.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中,减少了I/O操作,加快了类的查找速度。
Android面试题——JVM_第35张图片
Android面试题——JVM_第36张图片

索引区

Android面试题——JVM_第37张图片
Android面试题——JVM_第38张图片
Android面试题——JVM_第39张图片
Android面试题——JVM_第40张图片
Android面试题——JVM_第41张图片
Android面试题——JVM_第42张图片

你能不能自己写一个叫做java.lang.Object的类?

Android面试题——JVM_第43张图片
Android面试题——JVM_第44张图片

字节码加载

Android面试题——JVM_第45张图片

方法区

Android面试题——JVM_第46张图片

方法区实现

Android面试题——JVM_第47张图片

Java程序的双亲委派模型

Android面试题——JVM_第48张图片

Android程序的双亲委派模型

Android面试题——JVM_第49张图片
Android面试题——JVM_第50张图片

ClassLoader源码

Android面试题——JVM_第51张图片
Android面试题——JVM_第52张图片

加载自己写的Object类

Android面试题——JVM_第53张图片

双亲委派模型的好处

Android面试题——JVM_第54张图片

为什么要打破双亲委派模型

Android面试题——JVM_第55张图片
在这里插入图片描述
Android面试题——JVM_第56张图片
Android面试题——JVM_第57张图片

所有被new出来的实例,都是放在堆中的吗?

Android面试题——JVM_第58张图片

Android面试题——JVM_第59张图片
Android面试题——JVM_第60张图片
Android面试题——JVM_第61张图片

GC为什么会导致应用程序卡顿?

Android面试题——JVM_第62张图片
Android面试题——JVM_第63张图片
Android面试题——JVM_第64张图片
Android面试题——JVM_第65张图片
Android面试题——JVM_第66张图片
Android面试题——JVM_第67张图片

分代回收

Android面试题——JVM_第68张图片
Android面试题——JVM_第69张图片
Android面试题——JVM_第70张图片
Android面试题——JVM_第71张图片
Android面试题——JVM_第72张图片
Android面试题——JVM_第73张图片
在这里插入图片描述
Android面试题——JVM_第74张图片
在这里插入图片描述
Android面试题——JVM_第75张图片
Android面试题——JVM_第76张图片
Android面试题——JVM_第77张图片

Android面试题——JVM_第78张图片
Android面试题——JVM_第79张图片
Android面试题——JVM_第80张图片
Android面试题——JVM_第81张图片

垃圾检测算法

Android面试题——JVM_第82张图片
Android面试题——JVM_第83张图片
Android面试题——JVM_第84张图片

垃圾回收算法

Android面试题——JVM_第85张图片
Android面试题——JVM_第86张图片
Android面试题——JVM_第87张图片
Android面试题——JVM_第88张图片

Android面试题——JVM_第89张图片
Android面试题——JVM_第90张图片
Android面试题——JVM_第91张图片
Android面试题——JVM_第92张图片
Android面试题——JVM_第93张图片
Android面试题——JVM_第94张图片
Android面试题——JVM_第95张图片

Android平台虚拟机中的CG又是怎样的?

Android面试题——JVM_第96张图片
Android面试题——JVM_第97张图片
Android面试题——JVM_第98张图片
Android面试题——JVM_第99张图片
Android面试题——JVM_第100张图片
Android面试题——JVM_第101张图片
Android面试题——JVM_第102张图片
Android面试题——JVM_第103张图片
Android面试题——JVM_第104张图片
Android面试题——JVM_第105张图片
Android面试题——JVM_第106张图片
Android面试题——JVM_第107张图片
Android面试题——JVM_第108张图片
Android面试题——JVM_第109张图片
Android面试题——JVM_第110张图片
Android面试题——JVM_第111张图片
Android面试题——JVM_第112张图片
Android面试题——JVM_第113张图片

双重检测的单例,为什么还要加volatile关键字?

Android面试题——JVM_第114张图片
Android面试题——JVM_第115张图片
Android面试题——JVM_第116张图片
Android面试题——JVM_第117张图片
Android面试题——JVM_第118张图片
Android面试题——JVM_第119张图片
Android面试题——JVM_第120张图片
Android面试题——JVM_第121张图片
Android面试题——JVM_第122张图片
Android面试题——JVM_第123张图片
Android面试题——JVM_第124张图片
Android面试题——JVM_第125张图片
Android面试题——JVM_第126张图片
Android面试题——JVM_第127张图片
Android面试题——JVM_第128张图片
Android面试题——JVM_第129张图片

你可能感兴趣的:(Android面试,jvm,android,java)