谈谈我理解的 Java
首先是我们日常会接触到的JRE(Java Runtime Envirnment)和 JDK(Java Development Kit)。JRE 是 Java 运行环境,包含了Java虚拟机(Jvm)和Java 类库,以及一些模块等。JDK 是 JRE 的一个超集,提供了更多的工具,比如编译器、各种诊断工具等。
然后
从语言特性方面理解 Java :
Java 是一个面型对象的语言,最显著的两个特性有两个方面,一是所谓的 “Compile once ,run anywhere” ,即 “一次编译到处运行” ,能轻易的获得跨平台开发的能力;另一方面就是垃圾收集 GC(Garbage Collection),Java 通过垃圾收集器 GC(Garbage Collector)回收分配内存,大多数情况下,程序员不需要自己操心内存的分配与回收。
一次编译,到处运行的原因在于 Java 跨平台的特性。而 Java 跨平台的特性跟 Java 的虚拟机密不可分。比如说在 Windows 平台和 linux 平台都有相应的 JDK,安装好JDK 也就有了Java 语言的运行环境。所以严格来说并不是说 Java 语言可以跨平台,而是在不同的平台都有 Java 语言的运行环境而已,所以就有了编译一次到处运行的说法。
我们通常把 Java 分为编译期和运行时,而我们平时写的 Java 代码在运行前要先被 Javac 编译为 字节码(.class 文件,也就是在各个平台都可以运行的文件),然后在运行时通过 Jvm 虚拟机启动类加载器(Class-loader)加载字节码文件,最后由解释器解释执行。
需要注意的是 Java 并不完全是解释执行,比如我们大多数情况使用的 Oracle JDK 提供的 Hospot JVM ,都提供了 JIT(Just - In Time)编译器,也就是我们说的动态编译器。JIT 能够在程序运行时将热点代码编译成机器码,这种情况就属于编译执行,而不是解释执行了。
内容来自 即可专栏读书笔记