前言
JDK, JRE, JVM这几个概念很容易搞晕, 其实, 哪怕是JAVA老手也不一定能理清这些, 所以, 咸鱼还是简单的过下这几个概念.
JDK, JRE, JVM
JDK(Java Development Kit), 针对Java开发人员的产品, 是整个Java的核心, 包括了Java运行环境JRE、Java工具和Java基础类库
JRE(Java Runtime Environment), 运行Java程序所必须的环境的集合,包含JVM标准实现及Java核心类库.
JVM(Java Virtual Machine), 我们常说的java虚拟机, 它是整个java实现跨平台的最核心的部分, 它是一种抽象的计算机, 通过从实际的计算机中仿真模拟各种计算机功能来实现的.
一句话描述三者的关系:
JDK包含JRE, JRE包含JVM
为什么要JVM?
一次编译, 到处运行
这句话想必大家都听过.
那么问题来了, 不同的计算机平台有不同的硬件、系统、内核等等, 这些差异怎么可能让一个Java程序在不同的平台直接运行呢?!
于是聪明的开发者便想到了办法:
计算机底层我没法统一, 但是我可以屏蔽底层的差异, 加个中间层;
这个中间层就是JVM, 它就是一个字节码翻译器,它将字节码文件翻译成各个系统对应的机器码,确保字节码文件能在各个系统正确运行.
这样, 针对不同的计算平台(mac, windows, linux……)提供相同功能的JVM, 就能够让 “一次编译, 到处运行
” 吹上天.
看到此处以会恍然大悟, 原来:
Java的跨平台特性其实是由JVM实现的.
JVM有哪些
说到JVM就不得不提下JVM规范.
JVM规范是什么呢?
简单来说, JVM规范就是oracle制定的一组设计要求, 你只要遵守这些要求实现出来的虚拟机就是JVM.(可以简单的理解为接口和实现的联系)
我们平时常说的JVM一般是指的某种具体的JVM规范的实现, 而不是空洞的规范!
比如我们最经常使用的JAVA虚拟机hotspot, 它就是一种JVM规范的具体实现.
主流的JVM如下
- HotSpot VM (SUN的)
- J9 VM (IBM的)
- Zing VM (Azul Systems的)
不同的JVM实现细节上会有差异,
非主流的这里不介绍了.
接下来所有的知识均是针对HotSpot VM开展的, 要问为啥?
当然是因为它是绝对的主流!
JVM究竟做了哪些活?
JVM在Java程序执行过程中做了很多事.
可以看到JVM主要做了以下几件事
- 类加载
- 执行
以及
- 贯穿始终的内存分配及垃圾回收!
专业来说就是:
JVM被分为三个主要的子系统:
- 类加载器子系统
- 运行时数据区
- 执行引擎
接下来的文章, 我们针对每一块进行详细的了解