Java 代码到底是如何运行起来的? JVM 和操作系统的关系? JVM、JRE、JDK 的关系? Java 虚拟机规范和 Java 语言规范的关系?

7 篇文章 0 订阅
订阅专栏

目录

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

JVM 和操作系统的关系?

JVM、JRE、JDK 的关系?

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

总结

为什么 Java 研发系统需要 JVM?

对你 JVM 的运行原理了解多少?

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


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

如图:

下面以一个例子解释:

范例:helloworld

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

这段 HelloWorld.java,它遵循的就是 Java 语言规范。其中,我们调用了 System.out 等模块,也就是 JRE 里提供的类库。使用 JDK 的工具 javac 进行编译后,会产生 HelloWorld 的字节码。

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

0 getstatic #2 <java/lang/System.out>
3 ldc #3 <Hello World>
5 invokevirtual #4 <java/io/PrintStream.println>
8 return

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 方法,就会给它分配一个栈帧。当退出方法体时,会弹出相应的栈帧。你会发现,大多数字节码指令,就是不断的对栈帧进行操作。

而其他大块数据,是存放在堆上的。

 

JVM 和操作系统的关系?

JVM能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。JVM 认为是一个翻译器,会持续不断的翻译执行 Java 字节码,然后调用真正的操作系统函数,这些操作系统函数是与平台息息相关的。

Java 可以实现跨平台了。JVM 只需要保证能够正确执行 .class 文件,就可以运行在诸如 Linux、Windows、MacOS 等平台上了。 Java 跨平台的意义在于一次编译,处处运行。JVM 与操作系统之间的关系:JVM 上承开发语言,下接操作系统,它的中间接口就是字节码。

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

JVM、JRE、JDK 的关系?

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

对于 JDK 来说,就更庞大了一些。除了 JRE,JDK 还提供了一些非常好用的小工具,比如 javac、java、jar 等。

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

左半部分是 Java 虚拟机规范,其实就是为输入和执行字节码提供一个运行环境。右半部分是我们常说的 Java 语法规范,比如 switch、for、泛型、lambda 等相关的程序,最终都会编译成字节码。而连接左右两部分的桥梁依然是 Java 的字节码。

如果 .class 文件的规格是不变的,这两部分是可以独立进行优化的。但 Java 也会偶尔扩充一下 .class 文件的格式,增加一些字节码指令,以便支持更多的特性。

总结

为什么 Java 研发系统需要 JVM?

JVM 解释的是类似于汇编语言的字节码,需要一个抽象的运行时环境。同时,这个虚拟环境也需要解决字节码加载、自动垃圾回收、并发等一系列问题。JVM 其实是一个规范,定义了 .class 文件的结构、加载机制、数据存储、运行时栈等诸多内容,最常用的 JVM 实现就是 Hotspot。

对你 JVM 的运行原理了解多少?

JVM 的生命周期是和 Java 程序的运行一样的,当程序运行结束,JVM 实例也跟着消失了。JVM 处于整个体系中的核心位置,关于其具体运行原理,之后更.....。

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

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

过程如下:Java 文件->编译器>字节码->JVM->机器码。


 

 

 

 

启源:Java程序Java平台、操作系统关系
qq_41916318的博客
07-05 1782
我们所熟知的平台是Windows、Linux等操作系统和硬件组成的基于硬件的平台,而java平台不同于这些平台,它是一种全新的软件平台,是建立在以上提到的各种平台之上的,能在计算机上运行高度交互的、动态的、安全可靠的小应用程序和应用程序Java平台主要包括俩个主要组成部分:Java虚拟机和应用编程接口(javaapi)。java虚拟机是一个由软件模拟实现的计算机。java程序经过idea和eclipse上的编译器编译后得到java字节码文件,该字节码文件会被java虚拟机翻译成机器指令,通...
JVM系列一:Java虚拟机操作系统结构比较
weixin_34245169的博客
10-04 891
2019独角兽企业重金招聘Python工程师标准>>> ...
操作系统进程的角度理解 Java 虚拟机
分享美好的专栏
07-08 2360
java 是一个 windows 的命令行的外部命令,其实对应了一个应用程序,这个程序就是 javahome/jre/bin 中的 java.exe,java 这个应用程序启动的时候,windows 就启动了一个名为 java.exe 的进程,如下图: 因为我是在windows下面的命令行中启动的 java,所以在 explorer.exe —子进程—> cmd.exe—子进程—>jav
JVM内存管理学习
qq_34606099的博客
03-04 285
JVM操作系统关系: //上传图片 跨平台:我们平常写的.java经过javac编译成.class文件之后交给jvm,在不同系统之间的运行结果都是一样。 跨语言:.class不是java的专有,例如kotlin等其他语言编程成.class文件也是一样运行的道理。 Java SE体系架构 //图片 JVM整体 //图片 解释执行:可以理解:jvm将class解释成机器码,执行一行翻译一行,或者全部翻译。这种较慢,一般是第一种,一行只是个说明量词,不是真的一行。 JIT:热点数据,执行了多次的代码会被编译成
JVM操作系统关系是什么?
TrueDei
07-28 5080
JVM操作系统关系(图文并茂)?
详解Java中的JDKJREJVM
08-31
Java开发中的JDKJREJVM是三个至关重要的概念,它们构成了Java应用程序运行基础。理解这三个术语以及它们之间的关系是每个Java开发者必备的知识。 JDKJava Development Kit)是Java开发工具包,它是Java开发...
Java基础】JDKJREJVM之间的关系
12-22
3.JDKJREJVM的区别 3.1 Java为什么能跨平台,实现一次编写,多处运行? 1.编译器、调试器 JAVA编译器(javac.exe) JAVA编译器的作用是将(.java文件)编译成字节码文件,是最基本的开发工具。编译时首先读入java...
JDKJava 语言的软件开发工具包,它包含了JAVA运行环境(JVM+Java系统类库)和JAVA工具 (java8)
最新发布
04-10
java运行环境,也就是jre,全称为Java Runtime Environment,其中包含jvmJava Virtual Machine)虚拟机java核心类库。 jvm能将字节码解释成可执行的机器码,机器码和平台相关(不同硬件环境、不同操作系统,...
java环境中的JDKJVMJRE详细介绍
09-01
Java开发工具包(JDK)是Java编程的核心组件,提供了编写、编译和运行Java程序所需的一切工具。...理解JDKJVMJRE之间的关系对于Java开发者来说至关重要,因为它们构成了Java开发和运行的基础框架。
Java中的数据类型及JDK, JRE, 和 JVM解释及关系.zip
02-27
Java的世界里,了解数据类型、JDKJava Development Kit)、JREJava Runtime Environment)以及JVMJava Virtual Machine)的关系至关重要,它们是Java程序运行的基础。 首先,让我们深入探讨Java中的数据...
Java语言规范JVM规范(7、8、9)
01-19
包含Java SE7、8、9的语言规范虚拟机规范,Oracle官方文档,可以去官网下载:https://docs.oracle.com/en/java/index.html
通过操作系统来了解JVM(企图找到操作系统JVM间千丝万缕的关系
qq_42411214的博客
08-13 872
进程和线程的区别 对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品。这是对于一般操作系统概念 对于JVM会有不同的理解大家可以看一下 而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其他线程之间直接共享数据,而且拥有自己的栈空间,拥有独立序列。 共同点: 它们都能提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点。 线程执行开销比较小,但不利于资源的管理和保护,而进程相反。同时,线程适合在SMP机器上运行,而进程可以跨机器迁移
JVM(五)——内存和几种代码报错之间的关系
一切安好
11-30 503
StackOverFlowError OutOfMemoryError PermGen SpaceError 这几种异常时什么意思呢? 哪种代码可以导致这几种错误呢?
谈谈对java平台的理解和java到底是不是解释执行
gd359353793的博客
01-19 630
谈谈对java平台的理解和java到底是不是解释执行 前言 前几天看到了一个面试题问谈谈对java平台的理解和Java是解释执行吗? 第一眼看到这个问题,第一感觉是自己会,自己天天和java亲密接触怎么会答不出来呢?但要回答这个问题,一时之间又不知道该怎么说,不知道从何说起,也不知道怎么全面的说清楚,经过努力研究写下这篇文章,算是对自己一个考察.(最后有总结如果觉得讲的啰嗦可以直接看最后面总结) ...
JVM线程模型与操作系统厂商的关系
度窝-笔记
05-08 288
jvm线程仍然可以自行控制调度算法(hotspot在非solaris放弃了这种骚操作,直接让一个jvm线程对应一个os线程,成为1vs1模型)。 也就说,有些jvm厂商自己实现线程调度算法,在os线程的基础上又做了一层封装。从而实现多个线程在一个os线程内并发,或者多个线程在n个线程内并发。你可以理解为jvm厂商真把jvm当成是计算机操作系统来做了。 按照jvm规范jvm线程是操作系统级...
操作系统 java jdk jre jvm关系
weixin_34032779的博客
10-09 86
2019独角兽企业重金招聘Python工程师标准>>> ...
面试:什么是操作系统JDK&JVM&JRE的区别、线程与进程的区别
Lemon_wzq的博客
12-05 388
什么是操作系统简单的了解下操作系统 简单的了解下操作系统 操作系统是管理计算机硬件和软件资源的系统软件,同时也是计算机系统的内核和基石,它为计算机程序提供公共服务。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。操作系统的类型非常多样. 操作系统作用:操作系统位于底层硬件与用户之间...
java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范
weixin_39988164的博客
02-24 134
博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech许多人知道类加载机制、JVM内存模型,但他们可能不知道什么是《Java虚拟机规范》。对于Java开发来说,《Java虚拟机规范》才是最为官方、准确的一个文档,了解这个规范可以让我们更深入地理解JVM。我们平常说的JVM其实更多说的是HotSpot(HotSpot是JVM规范的一种实现),但我们常常将HotSpot与JVM等同...
java运行环境是什么_Java运行环境是什么
weixin_35201342的博客
02-20 4626
Java运行环境(JRE)是一个软件,由太阳微系统所研发,JRE可以让计算机系统运行Java应用程序JRE的内部有一个Java虚拟机(JVM)以及一些标准的类别函数库。Java 运行环境(Java Runtime Environment,简称 JRE)是一个软件,由太阳微系统所研发,JRE 可以让计算机系统运行 Java 应用程序(Java Application)。JRE 的内部有一个 Jav...
"Java虚拟机JVM)的面试题及Java代码运行机制和实现原理
总结起来Java虚拟机JVM)是Java代码和计算机硬件之间的桥梁,它通过将Java代码编译成字节码文件,然后解释执行字节码来实现Java程序在不同系统上的运行JVM的存在使得Java成为一种跨平台的编程语言。而JDKJRE...
写文章

分类专栏

  • 微服务 3篇
  • Java面试 6篇
  • 缓存 1篇
  • Spring 2篇
  • 机器学习 2篇
  • JAVA并发 6篇
  • JVM 7篇
  • 计算机网络 1篇
  • 计算机操作系统 1篇
  • Web开发 9篇
  • Tomcat 3篇
  • JSP 6篇
  • Servlet 4篇
  • HTML 1篇
  • JavaScript 2篇
  • 工具 1篇
  • 数据库开发
  • MySQL 2篇
  • MySQL基础 7篇
  • java
  • Java基础知识 20篇
  • Java高级特性 20篇
  • 数据结构与刷题 18篇
  • C语言 2篇
  • letex 1篇
  • python 7篇

最新评论

  • 详解CMS

    weixin_45680747: 内存碎片这里讲得特别详细,赞赞赞!!!表情包

  • 面向对象案例分析 - Java基础知识 3

    梦世: 案例四,应该使用构造代码块

最新文章

  • SpringCloud使用学习
  • 微服务SpringCloud的前置知识复习
  • 微服务(认识微服务)
2021年3篇
2020年115篇
2018年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司不知名网站页面怎么优化乐山网络营销企业网站优化公司网站推广优化排名安徽网站优化外包公司温州网站推广和优化360 网站优化济宁知名网站优化电器建材网站seo优化费用南阳平台seo网站优化刷手机网站优化排水城网站seo优化价格中企网站优化方案网站链接优化包括正规的网站推广与优化专业团队网站的标签优化凌海网站的优化南海网站优化查询网站搜索引擎优化诊断浙江省网站优化定制网站seo推广优化茂名安天网站优化快照中小企业网站优化方式济南网站优化排名seo深圳企业建网站优化溧阳手机网站优化导购网站优化怎样优化网站如何优化网站密度淮北专业网站优化惠州网站排行优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化