# 虚拟机
# 系统虚拟机、程序虚拟机
- 系统虚拟机:在操作系统之上完全虚拟出一套新系统,类似VMWare、VirtualBox、Windows沙盒等
- 程序虚拟机:某个程序单独的运行环境,在一个操作系统上可以有多种程序的虚拟机
# JVM (Java Virtual Machine)
Java跨平台的就是JVM的功劳,因为Java是运行在JVM之上的,所以根据不同平台单独实现出一套JVM,就可以跑程序员写的代码了
# JDK、JRE、JVM
- JRE (Java Runtime Environment)包含了JVM,及一些Java常见的类库
- JDK (Java Development Kit)包含了JRE,附带一些Java命令
- 如果只装JRE也是可以跑java程序的
# .class文件
- 程序员写的代码通常是.java的文件,需要让javac编译一下,编译之后得到的叫做.class文件,也就是字节码文件,JVM主要通过字节码文件跟操作系统打交道,来完成我们的需求
- 随着JVM越来越完善,除了Java之外,派生了很多JVM语言,例如kotlin、Groovy、Scala;它们最终编译也会生成.class文件,交给JVM执行
# JVM种类
- JVM并不是唯一的;官方的、民营的、收费的、开源的,多种多样
- 我们这些普通人用的都是Hotspot虚拟机,阿里就有魔改的TaobaoJVM,其余的JVM还有JRockit、J9等等等
- 随着越来越多JVM语言的出现,JVM越来越被重视,如果你想在技术上挑战自我,可以搞一本《JVM虚拟机开发规范》研究研究,如果自己能搞一个JVM,基本上国内大厂基本任你挑了
# 基于栈、寄存器的架构
- 基于栈实现起来简单,不依赖于硬件(CPU指令集)通用性强,但是实现一个功能命令多,效率没有基于寄存器高
- 基于寄存器就相反于上者,目前安卓的Dalvik就是基于寄存器实现的
# JVM优势
- 出色的内存管理和垃圾回收机制,让开发人员不用专注于内存的控制
- 耦合性低