Java 是目前用户最多,使用范围最广的软件开发技术。Java技术 离不开 JVM,JRE,多种Java技术框架(spring家族技术栈,Mybatis等)的支撑。
JVM 是Java Virtual Machine 的缩写,Java虚拟机 是用来运行Java字节码程序的虚拟计算机软体程序,它负责将Java 字节码 转为各平台的底层机器指令,然后在平台上执行掉这些指令。
JRE Java Runtime Environment, 是一个软件包,,提供了运行一个Java程序所需的各种组件环境,其中包括了 Java的核心类库,JVM以及其他支持文件。
JDK Java Development Kit ,它是面向Java开发人员的工具包,为程序员同学提供了各种开发工具,当然它也肯定包含了运行Java程序的JRE。
如果你是和我一样要开发Java程序,请使用JDK。如果你只是想跑一个Java程序,那么JRE就肯定满足你的需求了。至于JVM 他是Java体系的核心基础组件,是Java程序运行的载体。
JVM,JRE,JDK三者关系
使用JDK的编译器来编译我们的 xx.java 文件就会得到 xx.class 的字节码文件,俗称字节代码 ByteCode。它是专门为虚拟机生成的代码,不管是什么平台的JVM得到这套字节代码都是一样的,所以它让Java代码实现了平台无关性。虽然字节码和平台无关,但是JVM它要负责将这些 Java 字节码 转为各平台的底层机器指令,所以不同平台的JVM都叫JVM,不同平台的JVM肯定是不同的。比如: Linux‘s JVM 它就 负责将Java 字节码 转为Linux平台的底层机器指令;Windows's JVM 它就 负责将Java 字节码 转为Windows平台的底层机器指令;Mac‘s JVM 它就 负责将Java 字节码 转为Mac平台的底层机器指令; 然后cpu 拿到这些指令,运行程序。
当今,除了Java语言,其他语言,像 Kotlin,Clojure,JRuby,Scala , Groovy 也是可以编译成字节码,然后在JVM上执行。他们都属于Java技术体系中的一员。
我们常说Java语言是平台无关的,仅仅只能局限在Java语言 以及 经过编译器编译出来的字节码文件是和平台无关的,但是JDK,JRE和JVM的具体实现一定是和平台相关。
今天的Java作为一个经常霸榜的编程语言,也要随着时代的发展,不断面临很多机遇和挑战。比如:微服务流行的当下,就对Java云原生提出了要求,所以从JDK9 开始逐步引入了GraalVM Compiler 以对云原生条件下的AOT提前特性提供支持。随着Java每半年更新的节奏,将会有更多的改进和更多优秀的特性 被推出来,毋庸置疑的是,Java 未来必然还能继续保持相当长的生命力。