【JVM第1课】Java 跨平台原理

无痛快速学习JVM,欢迎订阅本免费专栏

JVM

Java的特性就是程序员一次编写,到处运行,意思是我们只需要写一份代码,就可以在不同的操作系统(windows、Linux、Mac OS等)中运行。但是不同的操作系统能看懂的指令是不同的,所以实现方式就是给每个操作系统开发一个Java虚拟机(JVM)。

JVM运行的过程是把我们代码编译后的字节码翻译成系统能识别的机器语言,不同的系统有不同的JVM,所以就实现了跨平台的特性。

字节码

或许我们会有疑问,为什么源代码需要先编译成字节码呢?JVM为什么不直接翻译源代码呢?

其实这里主要是出于性能的考虑,因为Java是高级编程语言,所谓高级就是更贴合人类的语言习惯,高级的代价就是更远离机器语言,从代码到机器语言这个转换过程变长导致效率低。先由编译器将源代码转换为一种简单的中间形式(即字节码),然后再由 JVM 来执行这个中间形式,是一个更为高效的设计方案。

除性能外字节码还有一个强大之处就是可以兼容多种语言,比如我们如果把 Kotlin 语言的代码也编译成字节码,那么当然也可以在 JVM 上运行。

Java 源代码通过 javac 编译器被编译成字节码文件,命令是javac HelloWorld.java,如果我们是在开发环境中工作,如 Eclipse 或 IntelliJ IDEA,那么这些 IDE 会自动为我们处理编译过程。

编译和解释共存

假设我们是机器,只能看懂中文,我们阅读英文小说有两种方式,一种是直接阅读中文译本,另一种是请个能看懂英文的人坐在我们旁边一句一句的解释给我们听,但是肯定是第一种方式效率高,这第一种方式就是“编译”,第二种方式就是“解释”。

Java是编译和解释共存的语言,编译发生在源代码编译成字节码时期,解释发生在JVM把字节码解释给操作系统运行的时期。但是如果仅仅是这样,那Java的运行效率还是低,因为字节码还是一行一行解释运行的,所以为了提高效率,JVM 中还有一个非常重要的技术,叫做 ****JIT(Just-In-Time)

JIT编译器可以在程序运行时动态地识别出哪些代码段是最常被执行的“热点代码”,然后把这些代码编译成机器语言存储在代码缓存区,以提高运行效率。JIT 编译器并不是一开始就对所有代码进行编译,而是根据代码的执行频率和重要性来决定何时进行编译。所以我们的Java项目启动后,第一次运行代码的时候可能会相对以后运行较慢。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ替换默认端口

前提:客户通过漏洞扫描,发现rabbitmq中的erlang是默认端口4369,出于安全的考虑,需要将erlang的端口修改为其他的端口。 1.查看默认erlang的默认端口 netstat -plnt | grep 4369 2.关闭rabbitmq rabbitmqctl stop(注…

【MySQL】 运维篇—备份与恢复:使用mysqldump进行数据库备份与恢复

无论是企业应用、电子商务平台还是社交媒体,数据的安全性和完整性都是至关重要的。数据库备份是一种保护措施,确保在数据丢失、损坏或系统故障时,可以快速恢复数据,保持业务的连续性和稳定性。 应用场景 意外数据丢失&#xff1a…

Linux上配置NFS服务

架设一台NFS服务器,并按照以下要求配置: 1、开放/nfs/shared目录,供所有用户查询资料: 2、开放/nfs/upload目录,为192.168.xxx.0/24网段主机可以上传目录,并将所有用户及所属的组映射为nfs-upload,其UID和…

MySQL数据库MHA高可用

目录 一、MHA简述 二、MHA 的组成 三、MHA 的特点 四、MHA工作原理 五、MHA部署步骤 六、搭建 MySQL MHA MHA一主两从高可用集群示意图 实验环境 1. Master、Slave1、Slave2 节点上安装 mysql5.7 2. 关闭防火墙 3. 修改 Master、Slave1、Slave2 节点的主机名 4. 修…

【http作业】

1.关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld #关闭防火墙 [rootlocalhost ~]# setenforce 0 2.下载nginx包 [rootlocalhost ~]# mount /dev/sr0 /mnt #挂载目录 [rootlocalhost ~]# yum install nginx -y #下载nginx包 3.增加多条端口 [rootlocalhost ~]# n…

docker build cache 占用磁盘空间很高

一、查看docker 构建缓存占用空间 二、清理 三、查看

PostgreSQL 删除重复数据

我们常常会遇到这样的问题,就是数据重复。然后我们需要对重复数据进行删除。保留最大还是最小则根据具体业务来判断。 假设有表 vbi1 在设计表的时候由于 vbi01 没有被设置为主键,这个时候业务发现 vbi01 重复了,我们需要根据字段 vbi01 来删…

优选算法专题一 ——双指针算法

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

2025年NPDP产品经理认证考试时间和报考条件

在报考2025年NPDP认证考试前,了解NPDP相关考试信息是非常重要的,可以帮助我们更好地制定备考计划,提高学习效率。 NPDP考试时间 NPDP考试每年举办两次,分别在5月和11月进行,且考试一般安排在周末,以便在职的专业人士…

敢为人先 创世富尔是如何引领磁性元件磁集成技术风向的

【哔哥哔特导读】2021年便已实现车载OBC磁集成产品的量产,创世富尔将如何通过磁集成技术改变电源行业生态,并确立自身的领先优势? 自2023年新能源汽车厂商开启价格战以来,这波内卷逐渐蔓延至所有终端领域,加上上游材料…

Google如何做医疗大模型(Med-Gemini)

1. 前言 开发垂直领域模型的方法有好几种,其中医疗、法律等专业是比较能体现模型垂直行业能力的,因此也深受各大厂商的重视。 五一小长假的第一天,Google在Arxiv上发布了《Capabilities of Gemini Models in Medicine 》 ( https://arxiv.o…

虚拟光驱软件 PowerISO v8.7.0 中文激活版

PowerISO 是一款虚拟光驱工具及强大的光盘映像文件制作工具。支持创建、编辑、提取、压缩、加密和转换ISO/BIN图像文件。同时自带DISM工具,支持ESD/ISO/WIM/ESD格式转换,制作镜像文件制作U盘启动,支持ISO/BIN/IMG/DAA/WIM等各种常见文件类型。…

题目欣赏 之 初心数

不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的 2 倍是 36,369;18 的 3 倍是 54,549;…… 18 的 9 倍是 162&…

【简历】25届湖南某专升本JAVA简历:项目名称不要过份搞笑!!

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 另外:我们出这一系列校招简历指导的原因,就是看很多学生被忽悠,没有先定位大厂、中厂还是小公司,导…

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8 1、.NET Reactor V6.9.8 功能简介2、官方下载 1、.NET Reactor V6.9.8 功能简介 业界领先的源代码保护 .NET Reactor通过多种方法来防止反编译,这些方法会将 .NET 程序集转换为任何现有工具都无法反编译的进程。…

合并排序算法(C语言版)

#include <stdio.h> void Copy(int *a, int *b, int left, int right) { int i; for(i0;i<right-left1;i) { a[ileft] b[i]; } } // 将 a[left,middle] 和 a[middle1,right]合并到 b[left, right]中 void Merge(int *a, int left, int midd…

Twitter网页版怎么登录?详细步骤与常见问题解答

Twitter作为全球知名的社交媒体平台&#xff0c;通过网页版为用户提供了方便的浏览和互动体验。无论是分享日常动态、关注热门话题&#xff0c;还是查看国际资讯&#xff0c;Twitter都能让您第一时间掌握最新信息。对于新手用户&#xff0c;尤其是刚接触Twitter网页版的朋友&am…

Android Activity 属性 TaskAffiity、allowTaskReparenting

Activity未设置taskAffinity属性 页面跳转顺序 MainActivity -> StandardActivity -> SingleTopActivity-> SingleTaskActivity-> SingleInstanceActivity-> SingleInstancePerTaskActivity MainActivity 标准启动模式 StandardActivity 标准启动模式 SingleTo…

Java中创建线程的两种方式与区别

在Java中&#xff0c;创建线程是并发编程的基础。Java提供了多种方式来创建线程&#xff0c;其中两种最常见的方式是继承Thread类和实现Runnable接口。这两种方式各有优缺点&#xff0c;适用于不同的场景。下面将对这两种方式进行详细的介绍和比较。 一、继承Thread类 1. 基本…

PPT批量替换字体

1.【开始】➡【查找】➡【替换字体】。 2.在弹窗内选择替换字体&#xff0c;和想要换成的字体&#xff0c;设置好点击【替换】&#xff0c;然后点击【关闭】或者左上角的小【】。 3.可以检查一下&#xff0c;每一页的【宋体】或者其他字体&#xff0c;都被改成了【微软雅黑】…