Java基础 (21) Java虚拟机

常见问题
1)java虚拟机的特性
2)谈谈对 jvm 的理解
3)JVM内存区域,开线程影响哪块内存
4)对Dalvik、ART虚拟机有什么了解?Art和Dalvik对比
5)JVM内存模型,内存区域
6)虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派)
7)谈谈你对双亲委派模型理解

Compile Once,Run Anywhere如何实现
Javac编译,生成字节码
JVM解析,转换成特定平台的执行指令

Java基础 (21) Java虚拟机_第1张图片

Java源码首先被编译成字节码,再由不同平台的JVM进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。

为什么JVM不直接将源码解析成机器码去执行?

  • 准备工作:每次执行都需要各种检查
  • 兼容性:也可以将别的语言解析成字节码

JVM 如何加载.class文件

Java基础 (21) Java虚拟机_第2张图片
image.png

  • ClassLoader:依据特定格式,加载class文件到内存
  • Execution Engine:对命令进行解析
  • Native Interface:融合不同开发语言的原生库为Java所用
  • Runtime Data Area:JVM内存控件结构模型

类从编译到执行的过程

  • 编译器将xxx.java源文件编译为xxx.class字节码文件
  • ClassLoader将字节码转换为JVM中的Class对象
  • JVM利用Class对象实例化为xxx对象

ART 和Dalvik的区别
在应用安装的时候就预编译字节码到机器语言。AOT
Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机实例,并且每一个Dalvik应用作为单独的进程执行。
但是存储空间更大,更长的安装时间。性能显著提升、应用启动更快、运行更快、体验更流畅。更长的电池续航能力。更低的硬件。

Java基础 (21) Java虚拟机_第3张图片
通过javap指令编译代码
Java基础 (21) Java虚拟机_第4张图片

你可能感兴趣的:(Java基础 (21) Java虚拟机)