JVM是什么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能够无额定开销地混合应用这些编程语言,反对不同语言中混用对方的接口和对象,也可能反对这些语言应用曾经编写好的本地库文件。

虚拟机的介绍就先说到这,置信聪慧的你曾经对虚拟机有一个大抵的意识,下一章将虚拟机的内存构造,这也是当初Java面试的高频题,然而大多数人必定都只是理解堆,栈,程序计数器,本地办法栈,而后再理解一下堆中分了年老代,老年代这些,这也是培训机构教jvm局部的模板,然而每年培训出那么多人,你难道就不想比他们多晓得那么一点吗?各位人才应该都懂的,咱们下一章见。

各位人才,各位大佬,有不对的中央各位请不吝指教!都看到这儿了,点赞珍藏转发三连一下?祝各位早日找到女朋友。喜爱的敌人能够关注一下我的公众号敲代码的蛋蛋,一起成长,一起骚起来呀!!!

我是敲代码的蛋蛋,一个致力触摸编程门栏的老手。明天的你是否比昨天的你更优良了呢?

参考文档:

<<深刻了解Java虚拟机>> ----周志明

<<百度百科>>