初识JVM

JVM是什么jvm和Java的关系

JVM是什么

虚拟机是一种抽象化的计算机通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

所谓的java虚拟机,就是一台虚拟的机器。它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机。visual Box、VMare就属于系统虚拟机。他们完全是对物理计算机的仿真,提供一个可运行完整操作系统的软件平台。而java虚拟机就是典型程序虚拟机,它专门为执行单个计算机程序而设计,在java虚拟机中执行的指令我们称之为java字节码指令。

比如一台服务器上运行着两个用Java编写的程序,一个博客系统,一个电商系统,那么这两个Java程序、Java虚拟机、服务器之间是什么关系呢?

https://gitee.com/jjpp612/image01/raw/master/jvm基础故障处理工具/k^z1Y@PsRcyz.PNG

从上图可以看出来,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可以无额外开销地混合使用这些编程语言,支持不同语言中混用对方的接口和对象,也能够支持这些语言使用已经编写好的本地库文件。

https://gitee.com/jjpp612/image01/raw/master/jvm基础故障处理工具/OG1OKPoPYod@.PNG

虚拟机的介绍就先说到这,相信聪明的你已经对虚拟机有一个大致的认识,下一章将虚拟机的内存结构,这也是现在Java面试的高频题,但是大多数人肯定都只是了解堆,栈,程序计数器,本地方法栈,然后再了解一下堆中分了年轻代,老年代这些,这也是培训机构教jvm部分的模板,但是每年培训出那么多人,你难道就不想比他们多知道那么一点吗?各位人才应该都懂的,我们下一章见。

https://gitee.com/jjpp612/image01/raw/master/20200828/acIUgm!xfz6Y.jpg

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

https://gitee.com/jjpp612/image01/raw/master/20200829/0SReF^EOi^O2.jpg

https://gitee.com/jjpp612/image01/raw/master/20200829/miD@ixe^Z!V9.jpg

我是敲代码的蛋蛋,一个努力触摸编程门栏的新手。今天的你是否比昨天的你更优秀了呢?

参考文档:

<<深入理解Java虚拟机>> ----周志明

<<百度百科>>

阅读 23

推荐阅读