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

《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项目启动后,第一次运行代码的时候可能会相对以后运行较慢。

相关文章:

《JVM第1课》Java 跨平台原理

无痛快速学习JVM,欢迎订阅本免费专栏 JVM Java的特性就是程序员一次编写,到处运行,意思是我们只需要写一份代码,就可以在不同的操作系统(windows、Linux、Mac OS等)中运行。但是不同的操作系统能看懂的指令…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30目录1. Step Guided Reasoning: Improving Mathematical Reasoning using Guidance Generation and Step Reasoning摘要研究背…...

加强版 第五节图像处理与视频分析

基本概念 图像轮廓 主要针对二值图像&#xff0c;轮廓是一系列点 vector<vector<Point>xxx用于存储多个点 vector<Vec4i>xxx包含四个整数&#xff0c;分别代表下一个轮廓的索引&#xff0c;上一个轮廓的索引&#xff0c;一个子轮廓的索引和父轮廓的索引 相…...

Orleans8.2入门测试

微软官方文档&#xff1a;快速入门&#xff1a;使用 ASP.NET Core 生成第一个 Orleans 应用 - .NET | Microsoft Learn 项目及引入的nuget库&#xff1a; 1、接口项目&#xff1b;2、接口实现项目&#xff1b;3、silo项目&#xff1b;4、客户端项目 其中Microsoft.Orleans.St…...

【Linux 25】网络套接字 socket 概念

文章目录 &#x1f308; 一、IP 地址概念⭐ 1. IP 地址的作用⭐ 2. 源 IP 地址和目的 IP 地址 &#x1f308; 二、端口号概念⭐ 1. 源端口号和目的端口号⭐ 2. 端口号范围划分⭐ 3. 端口号 VS 进程 ID⭐ 4. 套接字 socket 的概念 &#x1f308; 三、传输层的典型代表协议⭐ 1. …...

python openai 通过Function Call 创建自动化任务

目录 一、什么是Function Call(函数掉用) 1. 功能概述 2. 工作原理 二、如何实现函数调用 1、定义自己的get_weather 函数 2、给助手添加函数调用 3、写好instrction,指导assistant去掉用你定义的方法。 4、最后也是最重要的,捕获 Assistant 的 Function Call 三、…...

设计模式之责任链的通用实践思考

责任链模式通常一般用在方法的拦截、监控、统计方面&#xff0c;比较典型的就是Spring的AOP拦截。 但写一些小的基础能力框架的时候&#xff0c;用AOP比较中&#xff0c;所以一般都是自己针对特定的功能写一些定制的责任链工具类&#xff0c;不太喜欢总是做一些定制化的东西&am…...

前端用canvas绘图并支持下载

1.根据数据绘制饼图 /** 绘制环形图 */ const drawPieCharts () > {const {canWithdrawalPriceFront,noWithdrawalPriceFront,haveWithdrawalPriceFront,} this.state;const myCanvas this.cavasRef.current;// ts-ignoreconst ctx myCanvas.getContext(2d);if (ctx) {…...

【Mac】Homebrew

1、Homebrew 简介 官网地址&#xff1a;https://brew.sh Homebrew 是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等很多实用的功能。 Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。 源说明br…...

Python笔记之线程库threading

Python笔记之线程库threading 参考博文 Python多线程笔记——简单函数版和类实现版 code review! Python 的 threading 库用于在程序中创建和管理线程。线程允许程序并发执行多个任务。以下是 threading 库的详解和一些简洁示例。 基本概念 线程&#xff1a;在一个进程中&a…...

go 包管理

Go语言所依赖的所有的第三方库都放在GOPATH目录下面 gomodule是Go语言默认的依赖管理工具 Modules是相关Go包的集合&#xff0c;是源代码交换和版本控制的单元&#xff0c;用于指定使用哪些源文件 GO111MODULEoff禁用gomodule&#xff0c;编译时从GOPATH和vendor文件夹中查找包…...

Js内建对象

数组解构 const arr ["1","2","3"]let a,b,c// 解构赋值 //将数组的第一个元素赋值给第一个变量&#xff0c;第二个元素赋值给第二个变量&#xff0c;依次类推[a,b,c] arr console.log(a,b,c) // 1 2 3 // 声明变量同时解构 let [a,b,c] [&qu…...

AXI接口的实现逻辑和底层原理,在FPGA中如何实现AXI接口,一篇文章足以搞明白!!!

AXI&#xff08;Advanced eXtensible Interface&#xff09;接口是一个点对点的接口&#xff0c;用于连接高性能的片上系统&#xff08;SoC&#xff09;中的处理器、外围设备、内存和其他IP核。以下是对AXI接口的详细解析&#xff0c;包括FPGA实现的原理、逻辑、速度以及详细的…...

《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析

本文是将文章《GBDT 算法的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式(11-12)是GBDT算法中非常关键的一步&#xff0c;它表示了如何通过计算损失函数的负梯度来指导下一棵树的生长。 公式(11-12)如下&#xff1a; r m i − [ ∂ …...

mysql设计

大家好&#xff0c;我是捡田螺的小男孩。 昨天一位粉丝&#xff0c;咨询了一个并发的问题~ 我提供了一个乐观锁兜底的方案&#xff0c;然后发现他们的表&#xff0c;都没有加version字段的,我想到&#xff0c;这不是表设计通用字段嘛。因此&#xff0c;本文跟大家聊聊&#xf…...

Android 斗鱼面经

Android 斗鱼面经 文章目录 Android 斗鱼面经一面二面 一面 先简单描述一下JVM JRE JDK的关系 :::info JVM&#xff08;Java Virtual Machine&#xff09; Java 虚拟机。它只认识 xxx.class 这种类型的文件&#xff0c;它能够将 class 文件中的字节码指令进行识别并调用操作…...

【机器学习】26. 聚类评估方法

聚类评估方法 1. Unsupervised Measure1.1. Method 1: measure cohesion and separationSilhouette coefficient Method 2&#xff1a;Correlation between two similarity matricesMethod 3&#xff1a;Visual Inspection of similarity matrix 2. Supervised measures3. 决定…...

linux 最多能创建多少个 TCP 连接?

linux 最大允许TCP连接数 约束一&#xff1a;服务器的端口范围约束二&#xff0c;服务器文件描述符限制约束三&#xff1a;系统线程约束四&#xff1a;系统内存总结 tcp连接四元组&#xff1a;源ip&#xff0c;源端口 <> 目标ip&#xff0c;目标端口 连续对同一个目标ip及…...

我为何要用wordpress搭建一个自己的独立博客

我在csdn有一个博客&#xff0c;这个博客是之前学习编程时建立的。 博客有哪些好处呢&#xff1f; 1&#xff0c;可以写自己的遇到的问题和如何解决的步骤 2&#xff0c;心得体会&#xff0c;经验&#xff0c;和踩坑 3&#xff0c;可以转载别人的好的技术知识 4&#xff0c;宝贵…...

Linux系统每日定时备份mysql数据

一、创建存储脚本的文件夹 创建文件夹&#xff0c;我的脚本放在/root/dbback/mysql mkdir ... cd /root/dbback/mysql 二、编写脚本 vi backup_mysql.sh 复制脚本内容 DB_USER"填写用户名" DB_PASSWORD"填写密码" DB_NAME"数据库名称" # …...

Codex自主规划开发工作流实践 Codex CLI、AI编程、自动规划开发、Agent工作流、长任务AI开发、CodexLoop

Codex自主规划开发工作流实践 Codex CLI、AI编程、自动规划开发、Agent工作流、长任务AI开发、CodexLoop 老规矩 先放最新地址&#xff1a; Codex 最新官方客户端下载地址 https://codexdown.cn/ 最近在折腾一件很有意思的事情&#xff1a; 不再给 Codex 写“超详细步骤”&…...

一篇文章吃透SpringBoot:自动配置原理与项目实战

一篇文章吃透SpringBoot:自动配置原理与项目实战 目录 1、springboot简介 2、springboot入门 3、热部署组件(DevTools) 4、springboot整合jsp 5、application.properties 6、springboot整合mybatis 7、springboot整合lombok 8、springboot实现单元测试 9、springboot整合drui…...

Linux内核模块管理:lsmod命令详解与实战应用

1. 项目概述&#xff1a;从“黑盒”到“白盒”&#xff0c;lsmod是你的系统模块探照灯如果你在Linux世界里待过一阵子&#xff0c;尤其是折腾过驱动、内核或者排查过一些稀奇古怪的系统问题&#xff0c;那你大概率听说过或者用过lsmod这个命令。乍一看&#xff0c;它的名字平平…...

手把手教你学Simulink——新能源并网逆变器的最大功率点跟踪(MPPT)与并网联合仿真

目录 手把手教你学Simulink——新能源并网逆变器的最大功率点跟踪(MPPT)与并网联合仿真 一、背景与挑战 1.1 为什么新能源并网离不开 MPPT? 1.2 核心痛点与设计目标 二、系统架构与核心控制推导 2.1 整体架构:DC 级联的“能量接力棒” 2.2 核心数学推导:看穿 MPPT 的…...

01_C语言学习路线与开发环境搭建

C语言学习路线与开发环境搭建 一、本篇文章要解决什么问题 你可能是第一次接触编程&#xff0c;或者从其他语言转过来想学 C 语言。不管哪种情况&#xff0c;摆在面前的第一个问题都是&#xff1a;从哪开始&#xff1f; 这篇文章就帮你解决三个最实际的问题&#xff1a; C 语言…...

【NotebookLM学术写作黄金法则】:20年科研老炮亲授5大避坑指南与3步合规提速法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM学术写作规范的底层逻辑与认知革命 NotebookLM 并非传统意义上的文档编辑器&#xff0c;而是一个以“语义锚点”和“引用可追溯性”为基石的学术协作文本引擎。其底层逻辑颠覆了线性写作范式…...

gomicro如何安装部暑

根据最新官方文档&#xff0c;以下是 go-micro&#xff08;v5 最新版&#xff09; 的完整安装与部署指南。目前最新稳定版本为 v5.16.0&#xff0c;推荐使用特定版本号安装以避免模块路径冲突。---一、环境准备 要求 说明 Go Go 1.21&#xff08;建议最新版&#xff09; …...

OpCore Simplify:2024年黑苹果EFI自动化配置生成工具终极指南

OpCore Simplify&#xff1a;2024年黑苹果EFI自动化配置生成工具终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾因为OpenCore配置的…...

深度剖析APK Installer:Windows平台Android应用安装的专业解决方案

深度剖析APK Installer&#xff1a;Windows平台Android应用安装的专业解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer是一款专为Windows平台设计…...

大多数癌症没有微生物组?Cell:有还是无,这是个问题

小编导读&#xff1a;这项发表于《Cell》的重磅研究对16,369个肿瘤全基因组进行了系统的微生物信号分析&#xff0c;开发并验证了名为PathSeq-T2T的宿主过滤与去污染流程。研究发现&#xff0c;大多数癌症类型的微生物信号在去污染后与背景无法区分&#xff0c;唯有口消化道癌&…...