语言排行版,目前Java是第二名:https://www.tiobe.com/tiobe-index/
世界上没有最好的编程语言,需要按照具体的使用场景来说话。
Java是一门跨平台语言,所谓跨平台就是,Java源文件会被编译成为字节码文件,不管是Windows,Linux还是Mac,都有其适配的JVM,也就是字节码文件可以随意在这些JVM上去运行。
Write once,run anywhere.
其他的语言,例如c语言,编译成为机器码之后,由于底层的机器语言支持不一样,编译后的机器语言文件是不可以跨操作系统运行的。而Java则是把兼容的工作,交给了JVM。不同的JVM负责去适配不同的操作系统。
所有的Java虚拟机都遵守java虚拟机的规范,语言编写者不需要考虑兼容问题。
Java虚拟机是Java平台的基石。它是技术的组成部分,负责硬件和操作系统的独立性,已编译代码的小尺寸以及保护用户免受恶意程序攻击的能力。 Java虚拟机是抽象的计算机。像真正的计算机一样,它具有指令集并在运行时操作各种内存区域。使用虚拟机实现编程语言是相当普遍的。最知名的虚拟机可能是UCSD Pascal的P代码计算机。
JVM
是跨语言的平台,很多语言都可以编译成为遵守规范的字节码,这些字节码都可以在Java
虚拟机上运行。Java虚拟机不关心这个字节码是不是来自于Java程序,只需要各个语言提供自己的编译器,字节码遵循字节码规范,比如字节码的开头是CAFEBABY
。
将各种语言编译成为字节码文件的编译器,称之为前端编译器。而Java
虚拟机中,也有编译器,比如即时编译器,此处称为后端编译器。
Java
虚拟机要做到跨语言,目前来看应该是当下最强大的虚拟机。但是并非一开始设计要跨语言。
跨语言的平台有利于什么?由于有了跨语言平台,多语言混合编程就更加方便了,通过特定领域的语言去解决特定领域的问题。
比如并行处理使用Clojure
语言编写,展示层使用JRuby/Rails
,中间层用Java
编写,每一应用层都可以使用不同的语言编写,接口对于开发者是透明的。不同语言可以相互调用,就像是调用自己语言原生的API一样。它们都运行在同一个虚拟机上。
字节码狭义上是java
语言编译而成,但是由于JVM
是支持多种语言编译的字节码的,而字节码都是一个标准规范,因为我们应该称其为JVM
字节码。
不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同操作系统上的不同JVM
中运行。
因此,Java
虚拟机实际上和Java
语言并非强制关联的关系,虚拟机只和二级制文件(Class
文件)强关联。
Github仓库地址:https://github.com/Damaer/JvmNote 文档地址:https://damaer.github.io/JvmNote/
PS:本笔记是在宋红康老师的JVM视频中学习的笔记,均经过实践,加上自己的理解。地址:https://www.bilibili.com/video/BV1PJ411n7xZ ,强烈推荐!!!
【作者简介】: 秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
- END -