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

JVM虚拟机以及跨平台原理

相信大家已经了解到Java具有跨平台的特性,即“一次编译,到处运行”,例如在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的。

那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)

JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行 字节码文件,运行我们编写的Java程序。

而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。

JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。

注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。

所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。

虽然JVM让Java实现了跨平台,却牺牲了效能,每次运行软件都要翻译字节码,内存占用多,CPU使用率高。

更加不能接受的是,操作系统默认不会安装JVM,用户安装你的程序之前,必须要安装JVM并正确设置,你可以要求小白用户安装你的软件,但是你能期望他了解JVM的有关知识并正确安装设置吗?

虽然你可以将JVM集成在你的程序中,自动安装并设置,不让用户干预,但是你希望附带一个比你的程序还要大好多的JVM吗?一个软件这样做或许可以接受,成千上万个软件都这样做,那用户要安装多少个JVM?磁盘空间要浪费多少?

种种原因,注定了Java客户端不利于推向市场,让小白用户接受。不过话又说回来,客户端开发也不是Java的初衷,Java最初是面向嵌入式的,却随着互联网的兴起而快速成长,在Web开发上大显身手。

注意:跨平台的是Java程序,不是JVM。JVM是机器码,不能跨平台,不同平台下需要安装不同版本的JVM。


图1  JVM实现跨平台

相关文章:

JVM虚拟机以及跨平台原理

相信大家已经了解到Java具有跨平台的特性,即“一次编译,到处运行”,例如在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C很难做到的。 那么,跨平台是怎样实现的呢?这就要谈及…...

【AIGC提示词系统】基于 DeepSeek R1 + ClaudeAI 易经占卜系统

上篇因为是VIP,这篇来一个免费的 提示词在最下方,喜欢的点个关注吧 引言 在人工智能与传统文化交融的今天,如何让AI系统能够传递传统易经文化的智慧,同时保持易经本身的神秘感和权威性,是一个极具挑战性的课题。本文将…...

电路笔记 : opa 运放失调电压失调电流输入偏置电流 + 反向放大器的平衡电阻 R3 = R1 // R2 以减小输出直流噪声

目录 定义影响和解决失调电压输入偏置电流平衡电阻R3推导公式: 失调电流 实际的运算放大器(Op-Amp)存在一些非理想特性,如失调电压(VIO)、失调电流(IIO)和输入偏置电流(I…...

ScrapeGraphAI颠覆传统网络爬虫技术

ScrapeGraphAI颠覆传统网络爬虫技术! 引言 在互联网时代,数据如同油田,丰富而深邃。但如何有效地提取这些数据,仍然是许多开发者面临的艰巨任务。你有没有想过,传统的网络爬虫技术是否已经过时?如今&…...

通过多层混合MTL结构提升股票市场预测的准确性,R²最高为0.98

“Boosting the Accuracy of Stock Market Prediction via Multi-Layer Hybrid MTL Structure” 论文地址:https://arxiv.org/pdf/2501.09760 ​​​​​​​ 摘要 本研究引入了一种创新的多层次混合多任务学习架构,致力于提升股市预测的效能。此架构融…...

java将list转成树结构

首先是实体类 public class DwdCusPtlSelectDto {//idprivate String key;//值private String value;//中文名private String title;private List<DwdCusPtlSelectDto> children;private String parentId;public void addChild(DwdCusPtlSelectDto child) {if(this.chil…...

互联网分布式ID解决方案

业界实现方案 1. 基于UUID 2. 基于DB数据库多种模式(自增主键、segment) 3. 基于Redis 4. 基于ZK、ETCD 5. 基于SnowFlake 6. 美团Leaf(DB-Segment、zkSnowFlake) 7. 百度uid-generator() 基于UUID生成唯一ID UUID生成策略 推荐阅读 DDD领域驱动与微服务架构设计设计模…...

xinference 安装(http导致错误解决)

为什么要使用xinference 安装xinference 环境 1&#xff09;conda create -n Xinference python3.11 注意&#xff1a;3.9 3.10均可能出现xinference 安装时候出现numpy兼容性&#xff0c;以及无法安装all版本 错误&#xff1a; error while attempting to bind on address&am…...

334递增的三元子序列贪心算法(思路解析+源码)

文章目录 题目思路解析源码总结题目 思路解析 有两种解法:解法一:动态规划(利用dp找到数组最长递增序列长度,判断是否大于3即可)本题不适用,因为时间复杂度为O(n^2),超时。 解法二:贪心算法:解法如上图,题目要求长度为三,设置第一个元素为长度1的值,是指长度二的…...

【Linux】29.Linux 多线程(3)

文章目录 8.4 生产者消费者模型8.4.1 为何要使用生产者消费者模型8.4.2 生产者消费者模型优点 8.5 基于BlockingQueue的生产者消费者模型8.5.1 C queue模拟阻塞队列的生产消费模型 8.6. 为什么pthread_cond_wait 需要互斥量?8.7 条件变量使用规范8.8 条件变量的封装8.9 POSIX信…...

利用UNIAPP实现短视频上下滑动播放功能

在 UniApp 中实现一个短视频上下滑动播放的功能,可以使用 swiper 组件来实现滑动效果,并结合 video 组件来播放短视频。以下是一个完整的示例,展示如何在 UniApp 中实现这一功能。 1. 创建 UniApp 项目 如果你还没有创建 UniApp 项目,可以使用 HBuilderX 创建一个新的项目…...

vscode+CMake+Debug实现 及权限不足等诸多问题汇总

环境说明 有空再补充 直接贴两个json tasks.json {"version": "2.0.0","tasks": [{"label": "cmake","type": "shell","command": "cmake","args": ["../"…...

【提示词工程】探索大语言模型的参数设置:优化提示词交互的技巧

在与大语言模型(Large Language Model, LLM)进行交互时,提示词的设计和参数设置直接影响生成内容的质量和效果。无论是通过 API 调用还是直接使用模型,掌握模型的参数配置方法都至关重要。本文将为您详细解析常见的参数设置及其应用场景,帮助您更高效地利用大语言模型。 …...

基于 .NET 8.0 gRPC通讯架构设计讲解,客户端+服务端

目录 1.简要说明 2.服务端设计 2.1 服务端创建 2.2 服务端设计 2.3 服务端业务模块 3.客户端设计-控制台 4.客户端设计-Avalonia桌面程序 5.客户端设计-MAUI安卓端程序 1.简要说明 gRPC 一开始由 google 开发&#xff0c;是一款语言中立、平台中立、开源的远程过程调用…...

6.Centos7上部署flask+SQLAlchemy+python+达梦数据库

情况说明 前面已经介绍了window上使用pycharm工具开发项目时,window版的python连接达梦数据库需要的第三方包。 这篇文章讲述,centos7上的python版本连接达梦数据库需要的第三方包。 之前是在windows上安装达梦数据库的客户端,将驱动包安装到windows版本的python中。(开…...

【C语言系列】深入理解指针(5)

深入理解指针&#xff08;5&#xff09; 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1&#xff1a;2.2.2代码2&#xff1a;2.2.3代码3&#xff1a;2.2.4代码4&#xff1a;2.2.5代码5&#…...

mysql自连接 处理层次结构数据

MySQL 的自连接&#xff08;Self Join&#xff09;是一种特殊的连接方式&#xff0c;它允许一个表与自身进行连接。自连接通常用于处理具有层次结构或递归关系的数据&#xff0c;或者当同一张表中的数据需要相互关联时。以下是几种常见的场景&#xff0c;说明何时应该使用自连接…...

##__VA_ARGS__有什么作用

##__VA_ARGS__ 是 C/C 中宏定义&#xff08;Macro&#xff09;的一种特殊用法&#xff0c;主要用于可变参数宏&#xff08;Variadic Macros&#xff09;的场景&#xff0c;解决当可变参数为空时可能导致的语法错误问题。以下是详细解释&#xff1a; 核心作用 消除空参数时的多余…...

鸿蒙 router.back()返回不到上个页面

1. 检查页面栈&#xff08;Page Stack&#xff09; 鸿蒙的路由基于页面栈管理&#xff0c;确保上一个页面存在且未被销毁。 使用 router.getLength() 检查当前页面栈长度&#xff1a; console.log(当前页面栈长度: ${router.getLength()}); 如果结果为 1&#xff0c;说明没有上…...

深度学习模型蒸馏技术的发展与应用

随着人工智能技术的快速发展&#xff0c;大型语言模型和深度学习模型在各个领域展现出惊人的能力。然而&#xff0c;这些模型的规模和复杂度也带来了显著的部署挑战。模型蒸馏技术作为一种优化解决方案&#xff0c;正在成为连接学术研究和产业应用的重要桥梁。本文将深入探讨模…...

避坑指南:在Qt 6.5下编译QGC源码,UI启动报错的几个常见原因与修复

Qt 6.5下QGroundControl源码编译实战&#xff1a;UI启动报错深度排查手册 当你满怀期待地克隆了QGroundControl最新源码&#xff0c;按照官方文档配置好Qt 6.5环境&#xff0c;却在首次启动时遭遇UI加载失败的黑色窗口或崩溃提示——这种挫败感我深有体会。本文将带你系统排查Q…...

为智能硬件项目集成大模型能力利用Taotoken实现低成本高可用的方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为智能硬件项目集成大模型能力利用Taotoken实现低成本高可用的方案 在智能家居、物联网等嵌入式硬件项目中引入大模型能力&#xf…...

qmcdump:3步轻松解锁QQ音乐加密文件,实现跨设备音乐自由

qmcdump&#xff1a;3步轻松解锁QQ音乐加密文件&#xff0c;实现跨设备音乐自由 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdu…...

告别WSL安装玄学:从0x80072f78到0x800701bc,一次搞懂Windows 11下的完整避坑指南

从0x80072f78到0x800701bc&#xff1a;Windows 11下WSL完整避坑手册 每次在Windows 11上安装WSL时&#xff0c;那些神秘的错误代码是否让你抓狂&#xff1f;0x80072f78、0x800701bc...它们像是一道道密码&#xff0c;阻挡着你进入Linux开发环境的大门。作为长期在Windows和Linu…...

基于Nuxt 4与Shadcn/ui的现代全栈仪表板开发实战

1. 项目概述&#xff1a;一个现代全栈仪表板的技术栈选择 最近在做一个内部管理后台&#xff0c;需要快速搭建一个既美观又功能齐全的仪表板。我的核心需求很明确&#xff1a;开发要快、代码质量要高、用户体验要好&#xff0c;并且要能轻松应对多语言场景。在评估了市面上各种…...

2026深度教程:如何用好 Gemini 3.1 Pro 联网搜索?实时信息获取与验证技巧全解析

目前&#xff0c;国内用户想稳定使用顶尖AI模型的联网搜索功能&#xff0c;像聚合了Gemini、ChatGPT、Grok等主流大模型的 KULAAI &#xff08;m.877ai.cn) 这类镜像站提供了直接可用的方案。本文将深入剖析Gemini 3.1 Pro的联网能力&#xff0c;从原理机制到实操技巧&#xff…...

专业右键菜单管理:用ContextMenuManager一键重塑Windows操作效率

专业右键菜单管理&#xff1a;用ContextMenuManager一键重塑Windows操作效率 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 在Windows生态中&#xff0c;右键菜…...

5分钟解锁你的网易云音乐:NCM解密工具全攻略

5分钟解锁你的网易云音乐&#xff1a;NCM解密工具全攻略 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经遇到过这样的困扰&#xff1a;从网易云音乐下载的歌曲只能在特定客户端播放&#xff0c;无法在其他设备上欣赏&…...

告别“检测即损伤”:激光加工重塑电路检测与修复新路径

随着芯片互联兴起&#xff0c;电路结构日趋复杂&#xff0c;隐性缺陷对良率的威胁显著增加。如何在不破坏电路的前提下发现短路、断路等问题并对其进行精准处置&#xff0c;是半导体集成电路领域提升器件性能与良率的首要任务。在这一需求驱动下&#xff0c;激光技术凭借其特性…...

Yarbo 机器人割草机调整策略:远程后门访问功能将设为可选安装

Yarbo 调整远程后门访问功能&#xff0c;设为可选安装Yarbo 原有的远程后门访问功能可能使不法分子通过互联网对机器人进行重新编程。如今&#xff0c;该公司计划彻底移除这一功能&#xff0c;联合创始人肯尼斯科尔曼承诺&#xff0c;客户将能够决定是否一开始就安装该功能&…...