当前位置: 首页 > news >正文

深圳网站建设商家免费建站网站一站式

深圳网站建设商家,免费建站网站一站式,口碑好的无锡网站建设,网站多久才能做起来JVM 和操作系统的关系 JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。 一般情况下,使用 C 开发…
JVM 和操作系统的关系

JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。

一般情况下,使用 C++ 开发的程序,编译成二进制文件后,就可以直接执行了,操作系统能够识别它;但是 Java 程序不一样,使用 javac 编译成 .class 文件之后,还需要使用 Java 命令去主动执行它,操作系统并不认识这些 .class 文件。

你可能会想,我们为什么不能像 C++ 一样,直接在操作系统上运行编译后的二进制文件呢?而非要搞一个处于程序与操作系统中间层的虚拟机呢?

这就是 JVM 的过人之处了。大家都知道,Java 是一门抽象程度特别高的语言,提供了自动内存管理等一系列的特性。这些特性直接在操作系统上实现是不太可能的,所以就需要 JVM 进行一番转换。

有了上面的介绍,我们就可以做如下的类比。
JVM:等同于操作系统;
Java 字节码:等同于汇编语言。

如果你还是对上面的介绍有点模糊,可以参考下图:
 

Cgq2xl4UXzOAXlI_AAFpK7ghZGQ508.png


从图中可以看到,有了 JVM 这个抽象层之后,Java 就可以实现跨平台了。JVM 只需要保证能够正确执行 .class 文件,就可以运行在诸如 Linux、Windows、MacOS 等平台上了。

而 Java 跨平台的意义在于一次编译,处处运行,能够做到这一点 JVM 功不可没。比如我们在 Maven 仓库下载同一版本的 jar 包就可以到处运行,不需要在每个平台上再编译一次。

现在的一些 JVM 的扩展语言,比如 Clojure、JRuby、Groovy 等,编译到最后都是 .class 文件,Java 语言的维护者,只需要控制好 JVM 这个解析器,就可以将这些扩展语言无缝的运行在 JVM 之上了。

我们用一句话概括 JVM 与操作系统之间的关系:JVM 上承开发语言,下接操作系统,它的中间接口就是字节码。

而 Java 程序和我们通常使用的 C++ 程序有什么不同呢?这里用两张图进行说明。
 

CgpOIF4VvV2AI0nOAAH7mA63_GA021.png


 

CgpOIF4VvWaASjTZAAKdf712E44111.png


对比这两张图可以看到 C++ 程序是编译成操作系统能够识别的 .exe 文件,而 Java 程序是编译成 JVM 能够识别的 .class 文件,然后由 JVM 负责调用系统函数执行程序。

JVM、JRE、JDK的关系

JVM 是 Java 程序能够运行的核心。但是需要注意,JVM 自己什么也干不了,你需要给它提供生产原料(.class 文件)。俗语说的好,巧妇难为无米之炊。它虽然功能强大,但仍需要为它提供 .class 文件。

仅仅是 JVM,是无法完成一次编译,处处运行的。它需要一个基本的类库,比如怎么操作文件、怎么连接网络等。而 Java 体系很慷慨,会一次性将 JVM 运行所需的类库都传递给它。JVM 标准加上实现的一大堆基础类库,就组成了 Java 的运行时环境,也就是我们常说的 JRE(Java Runtime Environment)。

有了 JRE 之后,我们的 Java 程序便可以在浏览器中运行了。大家可以看一下自己安装的 Java 目录,如果是只需要执行一些 Java 程序,只需要一个 JRE 就足够了。

对于 JDK(Java Development Kit) 来说,就更庞大了一些。除了 JRE,JDK 还提供了一些非常好用的小工具,比如 javac、java、jar 等。它是 Java 开发的核心。
JVM、JRE、JDK 它们三者之间的关系,可以用一个包含关系表示。
JDK>JRE>JVM

Cgq2xl4UXzOAWEn7AACdFd2H7HA713.png

Java 虚拟机规范和 Java 语言规范的关系

这里的 Java 程序是文本格式的。比如下面这段 HelloWorld.java,它遵循的就是 Java 语言规范。其中,我们调用了 System.out 等模块,也就是 JRE 里提供的类库。

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");}
}

使用 JDK 的工具 javac 进行编译后,会产生 HelloWorld 的字节码。

我们一直在说 Java 字节码是沟通 JVM 与 Java 程序的桥梁,下面使用 javap 来稍微看一下字节码到底长什么样子。

Java 虚拟机采用基于栈的架构,其指令由操作码和操作数组成。这些字节码指令,就叫作 opcode。其中,getstatic、ldc、invokevirtual、return 等,就是 opcode,可以看到是比较容易理解的。

我们继续使用 hexdump 看一下字节码的二进制内容。与以上字节码对应的二进制,就是下面这几个数字(可以搜索一下)。
b2 00 02 12 03 b6 00 04 b1
我们可以看一下它们的对应关系。
        0xb2   getstatic       获取静态字段的值
        0x12   ldc             常量池中的常量值入栈
        0xb6   invokevirtual   运行时方法绑定调用方法
        0xb1   return          void 函数返回
opcode 有一个字节的长度(0~255),意味着指令集的操作码个数不能操作 256 条。而紧跟在 opcode 后面的是被操作数。比如 b2 00 02,就代表了 getstatic #2 <java/lang/System.out>。

JVM 就是靠解析这些 opcode 和操作数来完成程序的执行的。当我们使用 Java 命令运行 .class 文件的时候,实际上就相当于启动了一个 JVM 进程。

然后 JVM 会翻译这些字节码,它有两种执行方式。常见的就是解释执行,将 opcode + 操作数翻译成机器代码;另外一种执行方式就是 JIT,也就是我们常说的即时编译,它会在一定条件下将字节码编译成机器码之后再执行。

这些 .class 文件会被加载、存放到 metaspace 中,等待被调用,这里会有一个类加载器的概念。

而 JVM 的程序运行,都是在栈上完成的,这和其他普通程序的执行是类似的,同样分为堆和栈。比如我们现在运行到了 main 方法,就会给它分配一个栈帧。当退出方法体时,会弹出相应的栈帧。你会发现,大多数字节码指令,就是不断的对栈帧进行操作。

而其他大块数据,是存放在堆上的。Java 在内存划分上会更为细致。

最后大家看下面的图,其中 JVM 部分,就是我们的要点。

我们写的 Java 代码到底是如何运行起来的?

一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到元数据区,执行引擎将会通过混合模式执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的黑盒存在,输入字节码,调用操作系统函数。
过程如下:Java 文件->编译器>字节码->JVM->机器码。

总结

我们所说的 JVM,狭义上指的就 HotSpot。如非特殊说明,我们都以 HotSpot 为准。我们了解到,Java 之所以成为跨平台,就是由于 JVM 的存在。Java 的字节码,是沟通 Java 语言与 JVM 的桥梁,同时也是沟通 JVM 与操作系统的桥梁。

JVM 是一个非常小的集合,我们常说的 Java 运行时环境,就包含 JVM 和一部分基础类库。如果加上我们常用的一些开发工具,就构成了整个 JDK。我们讲解 JVM 就聚焦在字节码的执行上面。

Java 虚拟机采用基于栈的架构,有比较丰富的 opcode。这些字节码可以解释执行,也可以编译成机器码,运行在底层硬件上,可以说 JVM 是一种混合执行的策略。

http://www.dt0577.cn/news/19943.html

相关文章:

  • 江苏省华建建设股份有限公司网站网络营销个人总结
  • 做网站互联互通网站关键词快速排名技术
  • 进入网站服务器怎么做站长工具亚洲高清
  • 中山网站建设价位滕州网站建设优化
  • 培训网站开发需求说明书沧州网站seo公司
  • 做网站的业务分析论坛推广的特点
  • 网站推广产品品牌推广是做什么的
  • 网络营销公司做得比较好的seo教程有什么
  • 寻找专业网站建设含有友情链接的网页
  • 江门制作网站公司软文营销方案
  • 陕西省建设资格注册中心网站百度seo怎么做
  • 咋做黄页网站网站制作建设公司
  • 全国网站建设有实力杭州百度人工优化
  • 微信微网站开发网页代码
  • 做办公设备网站市场监督管理局官网入口
  • 如何做网站seo电商软文范例300字
  • 做视频网站 买带宽谷歌官网入口手机版
  • 如何运营好一个网站网络怎么推广自己的产品
  • 做网站 前台和后台制作一个网站需要多少费用
  • 衡阳高端网站建设网络营销品牌
  • 网站建设趋势seo常用工具网站
  • 注册公司需要多久的时间seo是什么的缩写
  • 安丘做网站的公司app推广引流方法
  • 网站开发建设流程晚上偷偷看b站软件推荐
  • 入侵织梦网站营销策划与运营公司
  • 开一间网站建设有限公司优化建站
  • 株洲做网站渠道电话win10最强优化软件
  • 国内哪个网站做水产比较大百度空间登录
  • 营销型网站模板中小企业网络营销现状
  • 做类似电影天堂的网站违法吗广州百度seo排名优化