# 虚拟机

# 系统虚拟机、程序虚拟机

  1. 系统虚拟机:在操作系统之上完全虚拟出一套新系统,类似VMWare、VirtualBox、Windows沙盒等
  2. 程序虚拟机:某个程序单独的运行环境,在一个操作系统上可以有多种程序的虚拟机

# JVM (Java Virtual Machine)

Java跨平台的就是JVM的功劳,因为Java是运行在JVM之上的,所以根据不同平台单独实现出一套JVM,就可以跑程序员写的代码了

# JDK、JRE、JVM

  1. JRE (Java Runtime Environment)包含了JVM,及一些Java常见的类库
  2. JDK (Java Development Kit)包含了JRE,附带一些Java命令
  3. 如果只装JRE也是可以跑java程序的

# .class文件

  1. 程序员写的代码通常是.java的文件,需要让javac编译一下,编译之后得到的叫做.class文件,也就是字节码文件,JVM主要通过字节码文件跟操作系统打交道,来完成我们的需求
  2. 随着JVM越来越完善,除了Java之外,派生了很多JVM语言,例如kotlin、Groovy、Scala;它们最终编译也会生成.class文件,交给JVM执行

# JVM种类

  1. JVM并不是唯一的;官方的、民营的、收费的、开源的,多种多样
  2. 我们这些普通人用的都是Hotspot虚拟机,阿里就有魔改的TaobaoJVM,其余的JVM还有JRockit、J9等等等
  3. 随着越来越多JVM语言的出现,JVM越来越被重视,如果你想在技术上挑战自我,可以搞一本《JVM虚拟机开发规范》研究研究,如果自己能搞一个JVM,基本上国内大厂基本任你挑了

# 基于栈、寄存器的架构

  1. 基于栈实现起来简单,不依赖于硬件(CPU指令集)通用性强,但是实现一个功能命令多,效率没有基于寄存器高
  2. 基于寄存器就相反于上者,目前安卓的Dalvik就是基于寄存器实现的

# JVM优势

  1. 出色的内存管理和垃圾回收机制,让开发人员不用专注于内存的控制
  2. 耦合性低