jvm和Java的关系是什么
这篇文章主要介绍了jvm和Java的关系是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
JVM是什么
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
所谓的java虚拟机,就是一台虚拟的机器。它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机。visual Box、VMare就属于系统虚拟机。他们完全是对物理计算机的仿真,提供一个可运行完整操作系统的软件平台。而java虚拟机就是典型程序虚拟机,它专门为执行单个计算机程序而设计,在java虚拟机中执行的指令我们称之为java字节码指令。
比如一台服务器上运行着两个用Java编写的程序,一个博客系统,一个电商系统,那么这两个Java程序、Java虚拟机、服务器之间是什么关系呢?
从上图可以看出来,Java写的博客系统,电商系统都是运行在jvm之上,这两个Java程序启动也对应着会启动两个JVM实例。JVM是运行在服务器的系统之上,服务器可以是linux系统,可以是windows系统,可以是centos系统,各种系统都可以。这也就是常说的Java是一次编译到处运行。可能这么说还是不通俗易懂,至少我刚开始学Java的时候我的老师这么说我就没有理解。那么我就说说我自己工作后的理解。
我们跑Java程序之前首先肯定是装jdk,我们在windows装jdk环境是用的windows版本的jdk,在linux上装jdk用的linux版本的jdk;jdk我们就可以理解为由Java程序设计语言、Java虚拟机、Java类库组成(Java Development kit)。我们写的Java程序可以在服务器上跑的前提是这个服务器装了jdk环境。也就是只要是服务器装了jdk环境,我们用maven或者gradle或者其他工具编译打包好的Java程序jar包就可以直接运行,我不需要在Java程序里面去适配你的windos环境还是linux环境还是centos环境。
jvm和Java的关系
jvm和Java是什么关系呢,jvm和Java是不是只能相互依存呢?我刚开始学Java的时候接触到jvm,我就说这么认为的,因为jvm又叫Java虚拟机,所以我认为jvm就是专门为Java设计的。Java有Java自己的规范,根据这个规范也衍生出多种不同的jdk,比如Oracle的jdk,sun的jdk(sun已经被oracle收购)IBM的jdk;虚拟机也有虚拟机自己的规范,根据这个规范也衍生出了多种不同的虚拟机,比如:武林盟主HotSpot虚拟机,小家碧玉Mobile Embedded VM,天下第二BEA JRockit/IBM J9虚拟机等。但是2018年4月,Oracle Labs新出了一个虚拟机Graal VM,口号是:"Run Programs Faster Anywhere"与Java刚诞生时候的"Write Once,Run Anywhere"遥相呼应,Graal VM是一个增强版虚拟机,可以作为"任何语言"的运行平台使用,这里"任何语言"包括了Java、Scala、Groovy、Kotlin等基于Java虚拟机之上的语言,还包括了C、C++、Rust等基于LLVM的语言,同时支持其他像JavaScript、Ruby、Python和R语言等。Graal VM可以无额外开销地混合使用这些编程语言,支持不同语言中混用对方的接口和对象,也能够支持这些语言使用已经编写好的本地库文件。
感谢你能够认真阅读完这篇文章,希望小编分享的"jvm和Java的关系是什么"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!