medium_OcT_CRWu_dTE7xmZsGigaLW6-JUNKjG1GtHSu9zVWZk.png
最近有点向这方面发展的兴趣,所以记录一下,了解一下。

JAVA语言出现

一门语言或者是一项技术的出现都不会偶然的,其必然是为了解决某些问题而出现的。那么java的出现是为了解决什么问题呢?

个人认为其主要是为了解决开发效率和跨平台的问题。众所周知计算机的编程语言从最初的汇编语言到C语言,再到C++,然后才有JAVA的出现。汇编语言晦涩难懂,开发效率极其低下,然后到C/C++对人类相对友好的语法和开发效率的提升。但是C/C++的缺点是无法跨平台运行,准确来说并不是C/C++无法夸平台,而是因为不同的平台下面其底层的实现不同,如Linux,MacOS,Windows等三大主流的操作系统其内核和硬件等的底层实现不一样,那么C/C++编写的程序,就需要针对不同的平台代码实现。并且C/C++的开发效率相对还是低,掌握并且写出优秀的C/C++代码是相对困难的。那么这时候就需要一个能夸平台,并且容易掌握,开发效率高的高级语言。这个时候Java就出现了,它的口号是”Write once, Run anywhere”。那么它是如何做到跨平台的呢?答案就是JVM。在说jvm之前,先说java平台的一些基本概念。

JDK(Java Development Kit)

JDK就是JAVA开发的工具包。其包含以下内容。

  • javac – 编译器,将源程序转成字节码
  • 打包工具,将相关的类文件打包成一个文件
  • javadoc,文档生成器,从源码注释中提取文档
  • debugger,查错工具
  • 运行编译后的java程序(.class后缀的) https://francepharmacie.fr/acheter-generique-viagra/
  • Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
  • Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

JRE

JRE是Java Runtime Environment缩写,指Java运行环境,它包括Java虚拟机(jvm)、Java核心类库和支持文件。

JDK和JRE的关系

JDK是JRE的超集。JRE中包含的东西JDK中都有。它们之间的关系和包含的内容如下图:
琛苏设计

JAVA的运行

JVM运行的不是JAVA代码,而是运行JAVA文件被javac编译后生成的class文件,class文件中就是字节码,不是可以直接执行的机器码。而jvm就是通过加装class文件中的字节码,把字节码解释成机器码并且执行机器码的东西。所以java程序分为编译期(javac)和执行期(jvm)。而执行期就分为:==字节码加载,解释或者编译字节码,执行机器码。这也就是说java语言本身没有跨平台==。因此不管是任何语言,只要能编译成jvm能识别的字节码就可以在jvm中运行(如Kotlin,Groovy,Scale等)。

JVM(java virtual machine)

JAVA语言的跨平台能力不是其本身,而是JVM赋予其跨平台的能力。JVM是对操作系统的进一步抽象,封装不同操作系统的底层接口。因此只要在不同的操作系统中安装对应的JVM,那么java代码就能运行在不同的操作系统中,从而实现其口号”Write once, Run anywhere”。那么有关Java平台中最关键的不是java语言,甚至任何语言只要能编译成JVM识别的字节码都可以跨平台,只也是JVM最强大之处,也是java平台中最重要,最关键的技术。要掌握java,并且最大的使用好JAVA那么必须了解JVM的运行机制。如JVM是如何执行类加载的?JVM的内存模型?JVM的如何解释或者编译字节码?以及JVM的GC策略等等?

总结

JAVA是一门非常成功的语言,目前JAVA还是世界上使用最多的语言。虽然Java相比更现代的语言(如GO,Rust)显得势弱,但是其强大的语言生态以及第三方库,目前无人能撼动。其贡献的JVM生态,以及JVM的思想被各种借鉴。我可以毫不夸张的说:JAVA在整个互联网的发展史中无疑是最伟大的语言之一。

文章转载自知库吧