这是一篇给Java小白看的JVM文章

文章目录

  • 前言
  • 从 Java 的跨平台特性说起
  • Java 跨平台的实现:JVM
    • JVM 的定义
    • 跨平台问题说明
    • 从编码到运行
  • JVM 已成为规范
  • JVM 的后续了解
  • 总结

前言

很多Java开发人员,还不清楚JVM是什么,就直接涉足JVM调优。

很多Java开发人员,说起JVM,只知道运行时数据区域(或称之为JVM内存布局或JVM内存结构)。

还有很多Java开发人员,在被问起:“你知道Java内存模型吗?”,答:“知道,Java内存模型分为方法区、堆、…”。

虽说“概念”这个词发明出来是为了方便交流和说明问题的,不用太过于较真。但是,答非所问就是你的不对了。

如果你属于其中一者,我劝你看完这篇文章。

本文就一个目的:认识JVM。

从 Java 的跨平台特性说起

认识JVM应该从哪里入手?

可以问自己几个问题,为什么有JVM?没有JVM会怎样?

Java编程语言设计的初衷就是要解决一个问题:程序员编写一次程序,可以在任何提供Java运行时环境的机器上运行

也就是Java语言的跨平台特性“一次编写,到处运行”。

这一点可以在Oracle官方提供的文档里证实

可能有些Java开发人员对跨平台特性不是很理解:“不应该就是编写一次到处运行吗?”。

当然不是,如果了解C、C++语言的,就知道,想要在不同平台上运行,需要分别编译,甚至重新编写。

当然,这是所有编程语言都存在的问题。原因下面有说明。

那么,Java是如何解决的?

Java 跨平台的实现:JVM

Java之所以能实现跨平台,离不开JVM的支持。

下面对此展开说明。

JVM 的定义

JVM,全称:Java Virtual Machine (Java 虚拟机)。

下面是官方对JVM的定义:

Java虚拟机是一种抽象的计算机。就像真正的计算机一样,它有一个指令集,并在运行时处理各种内存区域。

这个说明已经非常简单明了了。如果不理解的继续看下文。

跨平台问题说明

任何一个高级编程语言编写的程序,在最终执行前,都会被翻译成计算机可以理解的语言:机器码,也就是诸如0101的二进制数。

在这里插入图片描述

这些机器码就是指令的实际表示,计算机的工作原理就是通过执行这些指令来完成具体的任务。
(每一条指令中明确规定了计算机从哪个地址取数,进行什么操作,然后送到什么地址去等步骤)

而同一个操作,在不同的平台,指令可能会有所不同。

例如,“将数据从内存加载到寄存器”的操作,在x86架构和ARM架构中,指令就不一样:

  • 在x86架构中,可能会使用MOV指令将数据加载到寄存器EAX中:
MOV EAX, [0x12345678]
  • 在ARM架构中,可能会使用LDR指令将数据加载到寄存器R0中:
LDR R0, [0x12345678]

所以,在一个平台上编写的程序要在其他平台上运行,就需要重新编译,甚至重写。否则就会出现下图现象。

这也正是跨平台问题存在的根本原因。

从编码到运行

而JVM作为一个抽象的计算机,对外提供了一套自己的指令集,作用何在?

作用是:在不同平台运行符合自己指令的程序时,会将该指令转换成当前机器的本地指令。

这样就避免了多次编译的操作,从而实现“一次编写,到处运行”。

或者这样理解:JVM替代了多次编译的工作。

那么,符合自己指令的程序是什么呢?

没错,就是Java字节码(class文件)。

我们平时在编写完.java源码后,会经过JDK提供的编译工具(javac)编译为.class,而.class文件里面的内容就是JVM指令。

在这里插入图片描述

JVM 已成为规范

可能会有人有疑问,“为什么javac不直接编译成机器码?”

三个方面回答这个问题:

  1. 如果javac直接编译成机器码,就又回到跨平台的问题了。
  2. JVM除了解决跨平台问题外,还负责了内存管理和安全性的问题。
  3. 发展至今,JVM已经成为了一种规范,只要符合JVM规范,支持任何语言运行在JVM上。

在这里插入图片描述

JVM 的后续了解

通过上面的描述,如果理解了JVM是什么、JVM的作用或者JVM存在的意义,那就算是入门了。

如果激发了你对“JVM指令是什么”以及“它们如何被转换成机器指令”的好奇心,或者产生“类加载和JVM的关系”、“垃圾回收器和JVM的关系”等疑问。

那么,请关注我,后面的文章会带你一起了解。或者,自己可以去官方进行了解,官方文档链接给你放在这。

Java 各版本文档

Java语言&JVM规范文档

总结

最后总结一下本文内容:

  1. 所有高级编程语言编写的程序最终要翻译为机器码(指令的实际表示)才能被计算机理解。
  2. 由于计算机的硬件架构、操作系统不同,同一个操作指令可能也会不同。所以,程序要想在不同平台上运行,需要重新翻译或编写。
  3. Java最初是为了解决程序跨平台运行的问题,JVM正是实现跨平台特性的关键所在。
  4. Java语言编写的程序会被编译为Java字节码,也就是JVM自身的指令。运行时,JVM会将指令转换成本地机器指令,从而实现跨平台。
  5. JVM发展至今,已然是一个规范,已支持上百种编程语言。

当了解了JVM的作用、存在的意义,再去了解JVM的工作原理就不会那么困惑了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543294.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Deepgram推出新API:让跨语言交流不再是梦!

​ Deepgram 在人工智能飞速发展的今天,语音交互技术正在成为我们与机器沟通的主要方式。然而,现有的语音AI技术在速度、成本和对话质量等方面仍存在诸多问题。 为了解决这些痛点,语音识别领域的佼佼者Deepgram公司推出了一款全新的文本转语音…

精准运营,提升排名:亚马逊商品详情数据接口助力商家成长

一、接口重要性与作用 亚马逊商品详情数据接口是电商运营中不可或缺的桥梁,它连接着商家与消费者,承载着商品信息的精准传递与高效管理。通过此接口,商家能够实时获取并更新商品详情,从而显著提升运营效率,增强用户体…

如何用ComfyUI生成专业电商产品背景图?

如何用ComfyUI生成专业电商产品背景图——简单易用的工作流指南 随着电商行业的飞速发展,产品展示的质量直接影响到消费者的购买决策。而通过AI生成的背景图,不仅提升了图片的质感,还能节省大量后期处理时间。今天我们要介绍的是利用ComfyUI生…

idea上使用tomcat运行web项目

idea上使用tomcat运行web项目 首先需要安装tomcat,可以查看我上一篇文章 如果你已经配置tomcat,这里不需要改动。如果未配置,需要在这里选择你tomcat目录 修改下面的上下文,也就是网页上访问时http://localhost:8080/后面拼…

Linux c文件中创建一个由汇编代码构成的函数方法

c文件中经常使用asm完成嵌入式汇编&#xff0c;例如 #include <stdio.h>void a() {int result 0;int input 1;asm volatile ("movl %1, %0\n": "r"(result): "r"(input));printf("result %d\n", result);printf("input…

2024年高分项目管理系统推荐,奥博思 PowerProject 不容错过

PowerProject 支持项目全生命周期管理&#xff0c;涵盖立项、计划、执行监控与收尾的各个阶段。系统是包含项目管理、项目集管理、项目组合管理的一站式企业级项目管理平台。 PowerProject 是目前市面上功能相当齐全的一款项目管理软件&#xff0c;大中型企业软件选型首选。 立…

导出导入Oracle数据库使用黑框命令方式exp、imp【亲测】

下载工具 根据自己数据库的版本下载&#xff0c;以v19为例&#xff1a; 下载基础包Basic Package和工具包Tools Package 两个压缩包中的文件夹一样&#xff0c;但内容不一样&#xff0c;将两个压缩包中的文件解压合并到一起 https://www.oracle.com/database/technologies/inst…

复选框选择示例【JavaScript】

这段代码实现的功能是一个简单的复选框示例&#xff0c;它可以进行全选、反选和取消选中操作。 实现功能&#xff1a; 1. 全选&#xff1a;当点击标签"全选"旁边的复选框时&#xff0c;该页面上所有具有"item"类的复选框都会被选中&#xff08;或者取消选…

linux基础(二)远程连接、cd、rm、cp、mv、cat、绝对路径、管道符、

1.远程链接: SecureCRT、xshell&#xff1a;windows连接linux的工具 SecureFX、xftp&#xff1a;用于远程传输文件。 远程连接&#xff1a; windows远程连接windows&#xff1a;mstsc administrator windows远程连接linux&#xff1a;SecureCRT、xshell、 linux远程…

DK5V100R20H 同步整流芯片12V2.4A 封装SM-7

高性能双引脚同步整流芯片 DK5V100R20H是一款简单高效率的同步整流芯片&#xff0c;只有A&#xff0c;K两个引脚&#xff0c;分别对应肖特基二极管的PN管脚。芯片内部集成了100V功率NMOS管&#xff0c;可以大幅降低二极管导通损耗&#xff0c;提高整机效率&#xff0c;取代或替…

Docker全家桶:技术架构演进之路

在学习Docker之前&#xff0c;我们需要了解每种技术架构以及如何演进的&#xff0c;熟悉Docker在架构中的核心作用。在此&#xff0c;我们介绍一个从百级别的并发到千万级别甚至亿级别的并发情况下&#xff0c;服务端架构的演进过程&#xff0c;同时列举出每个阶段会遇到的问题…

LLM大模型一些碎片知识

预训练和微调 预训练阶段&#xff1a;使用公开数据经过预训练过程得到预训练模型&#xff0c;预训练模型具备语言的初步理解&#xff1b;训练周期比较长&#xff1b;微调阶段1&#xff1a;SFT&#xff08;指令微调/有监督微调&#xff09;。如果想要预训练模型在某个垂直领域&a…

本周宣讲提醒-线上专场——香港科技大学工学院2025/2026年度硕士研究生(MSc)项目招生宣讲会

&#x1f4c6;本周宣讲提醒-线上专场 &#x1f514;香港科技大学工学院2025/2026年度硕士研究生&#xff08;MSc&#xff09;项目招生宣讲会 &#x1f4cd;香港科技大学工学院大挑战研究暨研究生课程信息网络研讨会-线上专场 &#x1f559;时间&#xff1a;2024年9月24日&…

共享打印机,局域网搜不到

如果共享打印机后&#xff0c;局域网内其余机器检索不到 1. 排查 是否启用来宾账户&#xff08;Guest&#xff09; 2. 网络和共享中心->更改高级共享设置->启用网络发现、启用文件和打印机共享、关闭密码保护共享 排查基本可以解决搜索不到打印机问题

springboot书画在线学习网站-计算机毕业设计源码11849

摘 要 本篇论文旨在设计和开发基于SpringBoot的书画在线学习网站&#xff0c;提供用户便捷的学习方式和丰富的学习资源。在该系统中&#xff0c;用户可以通过网站浏览书画的相关内容&#xff0c;包括诗公告消息、书画资讯、课程信息等。同时&#xff0c;系统还将提供书画的学习…

【计算机方向】一区TOP神刊,刊文量>1000+,影响因子高,最快一个月accept!

期刊解析 &#x1f6a9;本 期 期 刊 看 点 &#x1f6a9; 中科院一区TOP期刊&#xff01; 审稿友好&#xff0c;IF10.2&#xff0c;自引率12.7% 最新年度发文1020。 今天小编带来计算机领域SCI快刊的解读&#xff01; 如有相关领域作者有意投稿&#xff0c;可作为重点关注…

2000-2012年各地级市市长特征信息数据/市长特征信息大全数据

2000-2012年各地级市市长特征信息数据 1、时间&#xff1a;2000-2012年 2、来源&#xff1a;百度搜索手工整理 3、指标&#xff1a;省级政区代码、省级政区名称、地市级政区代码、地市级政区名称、年份、市长姓名、出生年份、出生月份、籍贯省份代码、籍贯省份名称、籍贯地市…

信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法

信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法 目录 信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法效果一览基本介绍程序设计参考资料 效果一览 基本介绍 信号分解降噪 | Matlab实现基于TVFEMD-IMF能量熵增量的数据降噪方法。该方法引…

???Ansible——Playbook基本功能

文章目录 一、Ansible Playbook介绍1、Playbook的简单组成1&#xff09;“play”2&#xff09;“task”3&#xff09;“playbook” 2、Playbook与ad-hoc简单对比区别联系 3、YAML文件语法&#xff1a;---以及多个---&#xff1f;&#xff1f;使用 include 指令 1. 基本结构2. 数…

亿发电脑端513版本更新,销售开单、财务账目等多个板块细节优化

如果您正寻求突破传统业务模式的束缚&#xff0c;希望拥抱数字化转型带来的无限可能&#xff0c;我们诚邀您体验亿发软件。亿发专业团队将为您提供个性化的咨询和定制服务&#xff0c;帮助您的企业快速适应市场变化&#xff0c;实现业务模式和商业模式的创新。