4. 【Java】JVM 的秘密:Java 为什么能“一次编写,到处运行“

【算法】基于STM32的MPU6050卡尔曼滤波算法(入门级) 1. 简介 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。详情见:卡尔曼滤波简介 MPU6050的解算主要有三种姿态融合算法:四元数法 、一阶互补算法和卡尔曼滤波算法。我们常用的DMP库使用的是四元数法,本文采用卡尔曼滤波算法,使用RT-Thread国产操作系统,利用env工具进行串口、模拟IIC环境配置,使用10ms的线程进行卡尔曼滤波解算。 2. 阅读详情

摘要: 本文深入解析 Java 虚拟机(JVM)的核心原理,揭秘 Java "一次编写,到处运行"的跨平台奥秘。从编译与运行分离、JVM/JRE/JDK 三者的关系,到 JVM 内部构造(类加载器、运行时数据区、执行引擎、垃圾回收)以及完整的程序执行流程,通过生动的比喻和清晰的图示,帮助 Java 初学者和开发者构建对 Java 运行时的系统性认知。

关键词: Java 虚拟机 (JVM), 字节码, 跨平台, 垃圾回收 (GC), Java 运行时环境 (JRE)


前几篇文章,我们从认识 Java 开始,搭好了开发环境,还亲手写出了第一个 Hello, World! 程序。当时我说,Java 最大的魅力之一就是"一次编写,到处运行"——你在 Windows 上写的代码,拿到 Linux 或 macOS 上照样能跑,不需要任何修改。

但你有没有想过:这到底是怎么做到的? 为什么 C 语言写的程序不行,Java 就可以?

今天我们就深入底层,揭开 JVM(Java 虚拟机)的神秘面纱。放心,我不会讲太多晦涩的理论,而是用你能听懂的比喻,把这件事讲透。


1. 从 Hello World 说起 —— 编译和运行是两个步骤

还记得上一篇我们写的 HelloWorld.java 吗?我们在 IDEA 里点了一下绿色的"运行"按钮,程序就跑了。但 IDEA 在背后偷偷做了两件事:

  1. 编译:把 HelloWorld.java(我们看得懂的源代码)转换成一种叫做 字节码(Bytecode) 的文件 HelloWorld.class。
  2. 运行:启动 JVM,加载 HelloWorld.class,然后执行里面的指令。

这两个步骤是独立的。你可以手动在命令行里体验一下:

# 第一步:编译
javac HelloWorld.java

# 第二步:运行
java HelloWorld

编译后,你会看到一个 HelloWorld.class 文件——它就是 Java 字节码。这个文件不是机器码,计算机的 CPU 不能直接执行它。它需要被 JVM 解释或编译成当前平台能识别的机器码才能运行。

💡 打个比方:你写了一篇中文演讲稿(源代码),有人把它翻译成了国际通用语(字节码),然后到了美国,当地翻译把它转成英文讲给美国人听;到了日本,转成日文讲给日本人听。无论去哪个国家,那份国际通用语版本都是同一份——这就是 Java 字节码。


2. JVM、JRE、JDK —— 从内部视角再看一遍

第二篇我们简单对比过三者的关系,今天从 JVM 内部视角再看一遍,理解会更深。

名称全称包含内容作用
JVMJava Virtual Machine类加载器、运行时数据区、执行引擎、GC运行字节码
JREJava Runtime EnvironmentJVM + 核心类库(如 System、String 等)运行 Java 程序(不能开发)
JDKJava Development KitJRE + 开发工具(javac、jar、jdb 等)开发并运行 Java 程序

简单地说:

  • JVM 是"引擎",是运行的核心。
  • JRE 是"引擎 + 轮胎 + 方向盘",有了它车能跑,但你不能造车。
  • JDK 是"整车 + 工厂 + 修车工具",你不仅能开,还能造车、修车。

JVM、JRE、JDK 的关系:
这三个缩写是 Java 世界里最基础的概念,画个图就清楚了:

JVM、JRE、JDK 的关系

我们在第一篇文章里装的是 JDK 21,所以它包含了 JRE 和 JVM。当你运行 java 命令时,实际上是在启动 JVM。


3. 跨平台的秘密 —— 字节码 + JVM

现在我们可以回答那个核心问题了:为什么 Java 能跨平台?

答案就是两个关键设计:

  1. Java 源代码编译成字节码,而不是直接编译成特定平台的机器码。
  2. 每个平台都有自己的 JVM 实现——Windows 有 Windows 版 JVM,Linux 有 Linux 版 JVM,macOS 有 macOS 版 JVM。

你写的代码只需要编译成一份字节码,然后用哪个平台的 JVM,它就会自动把字节码转换成对应平台能执行的机器码。

再次打个比方:你写了一份国际通用语的文件(字节码),然后你把它带到美国,美国翻译官(JVM for Windows)把它读给美国人听;带到日本,日本翻译官(JVM for macOS)读给日本人听。你只需要带一份文件,翻译官们各显神通。

这就是 “一次编写,到处运行” 的本质。


4. JVM 内部构造 —— 它到底长什么样?

为了让你更直观地理解 JVM 是怎么工作的,我把它的核心组成部分画成一个简单的模型。这里不要求你完全记住,有个印象就好:

+------------------------------------------+
|              JVM 架构简图                 |
+------------------------------------------+
|  ① 类加载器(Class Loader)               |
|     把 .class 文件加载到内存中            |
+------------------------------------------+
|  ② 运行时数据区(Runtime Data Area)      |
|     ┌─────────┬─────────┬──────────┐     |
|     │ 堆      │ 栈      │ 方法区    │     |
|     │ (对象)  │ (局部变量)│ (类信息) │     |
|     └─────────┴─────────┴──────────┘     |
|     (实际上还包括程序计数器、本地方法栈等) |
+------------------------------------------+
|  ③ 执行引擎(Execution Engine)           |
|     把字节码翻译成机器码并执行             |
|     (解释器 + JIT 编译器)                 |
+------------------------------------------+
|  ④ 垃圾回收(Garbage Collector)          |
|     自动清理不再使用的对象                 |
+------------------------------------------+
  • ① 类加载器(Class Loader)

它的工作很简单:找到 .class 文件,读取它里面的字节码,然后把它加载到内存中。我们写程序时用到的 String、System 这些类,也是由类加载器从 JDK 的核心库中加载进来的。

  • ② 运行时数据区(Runtime Data Area)

这里是程序运行时的"工作空间",主要包含几块:

  • 堆(Heap):存放所有通过 new 创建的对象。它是所有线程共享的,也是垃圾回收的主要战场。
  • 栈(Stack):每个线程都有自己的栈,用来存放局部变量和方法调用的信息。方法执行时压栈,执行完出栈。
  • 方法区(Method Area):存放类的结构信息(如类名、方法定义、静态变量等)。在 JDK 8 之前它在 JVM 堆中,JDK 8 之后移至元空间(Metaspace),使用本地内存管理。
  • 程序计数器、本地方法栈等:其他辅助区域,初学阶段不必深究。

初学者不需要深究每个区域的细节,只要知道 JVM 为你的程序划分了不同的"仓库"来存放不同的东西就行。

  • ③ 执行引擎(Execution Engine)

这是 JVM 的"大脑"。它把字节码(一种抽象的指令集)转换成当前 CPU 能理解的机器码。早期的 JVM 采用解释执行(一条一条地解释,速度较慢),现在的 JVM 引入了 JIT(即时编译) 技术——它会识别出频繁执行的热点代码,直接编译成机器码并缓存起来,后续直接运行机器码,速度大幅提升。

  • ④ 垃圾回收(Garbage Collector,GC)

这是我们之前提到的"自动内存管理"的核心。GC 会周期性扫描堆内存,找出那些不再被任何引用指向的对象,然后把它们占用的空间回收掉,供后续使用。

想一下:当你写 new Student() 创建一个学生对象,并把它赋给变量 s。当 s 后来被赋值为 null 时,那个学生对象就没有人引用了,GC 就会在合适的时机把它清理掉。你不用手动 delete 或 free——Java 替你干了。


5. 垃圾回收 —— 你的"内存清洁工"

GC 可能是 JVM 中最"智能"的部分。它的核心思想是可达性分析:从一组称为"GC Roots"的起点(如当前运行中的线程、静态变量等)出发,沿着引用链标记所有能到达的对象。那些无法被标记到的对象,就是不再使用的"垃圾",会被 GC 回收。

现代 JVM 有多种 GC 算法,例如:

  • G1 GC(JDK 9+ 默认):把堆分成多个区域,优先回收垃圾最多的区域
  • ZGC(JDK 11+ 引入,JDK 21 增强):超低延迟,适合大内存场景
  • 分代式 ZGC(JDK 21):在 ZGC 基础上引入分代思想,进一步提升性能

我们以后会有专门的文章讲 GC 调优,现在你只需要记住:GC 自动帮你管理内存,你基本不需要操心对象的释放——这大大减轻了开发者的负担。


6. 一个完整的运行流程 —— 从 .java 到屏幕输出

现在把整个流程串起来:

你写的源代码:HelloWorld.java
       ↓ (javac 编译)
字节码文件:HelloWorld.class
       ↓ (java 命令启动 JVM)
JVM 类加载器把 HelloWorld.class 加载到内存
       ↓
JVM 执行引擎将字节码翻译成机器码
       ↓
CPU 执行机器码,执行 System.out.println(...)
       ↓
控制台输出:Hello, World!

每一步都清晰可见,这也是 Java 的设计理念:把底层复杂性封装起来,让开发者专注于逻辑。


今天的总结

今天我们聊了三个核心内容:

  1. 编译与运行是分离的——javac 产生字节码,java 启动 JVM 执行字节码。
  2. JVM、JRE、JDK 的关系——层层包含,JDK 最大,JVM 最小但最核心。
  3. 跨平台的本质——字节码 + 各平台的 JVM 实现,做到"一次编写,到处运行"。
  4. JVM 的核心组件——类加载器、运行时数据区、执行引擎、垃圾回收。
  5. GC 帮你自动管理内存,你不需要手动释放对象。

你现在已经站在了一个更高的视角看待 Java:不只是写代码,而是理解了代码背后运行的"舞台"。这个舞台就是 JVM,它承载了你的程序的一生。


动手试试

  1. 打开命令行,进入你之前 HelloWorld.java 所在的目录,手动执行 javac HelloWorld.java 和 java HelloWorld,观察生成的 .class 文件。
  2. 用文本编辑器(如记事本)打开 HelloWorld.class,你会看到一堆"乱码",那其实是字节码的二进制表示。虽然看不懂,但你能感受到它和原始代码的区别。
  3. 用 javap -c HelloWorld 命令查看字节码指令(如果你装了 JDK),你会看到类似 getstatic、ldc、invokevirtual 这样的指令。感受一下 Java 底层的样子。

下篇开始,我们就要正式进入 Java 语法的学习了。第一篇讲的是"代码的骨架"。我们会详细拆解一个 Java 程序的基本结构,包括包、导入、类、方法等。别担心,我会带着你一步步掌握。

我们下一篇见。😃

📌 获取本系列示例代码请访问 GitCode。

昆仑通态,自由串口通讯 软件默认无该功能,需要问客服索要扩展包。 阅读详情

相关推荐

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

Java 的跨平台性:实现“一次编写,到处运行”的秘密

在当今多变的软件开发环境中,编写能够跨多个操作系统无缝运行的应用程序是一项重要的技能。Java 以其强大的跨平台特性而闻名,这使得开发者可以编写一次代码并在多种平台上运行。Java 的跨平台性主要归功于它的设计哲学——“一次编写,到处运行”(Write Once, Run Anywhere)。这一理念的核心是 Java 虚拟机(JVM),它为 Java 程序提供了一个抽象层,使其能够在不同的操作系统上运行而无需修改源代码。

ebb29bbe的博客 1342

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5712

Java跨平台黑科技:一次编写到处运行的秘密

从1995年诞生至今,Java的跨平台能力仍在不断进化!JVM的翻译官原理 🌍字节码的通用语言特性 💾实际开发中的避坑指南 ⚠️思考题如果让你设计新的跨平台方案,你会怎么做?欢迎评论区讨论!💡#Java #跨平台 #JVM #字节码 #编程原理。

全栈开发工程师 928

Python+whisper/vosk实现语音识别

Whisper 是一个由 OpenAI 开发的人工智能语音识别模型,它能够将语音转换为文本。Whisper 模型特别之处在于它的设计目标是能够理解和转录多种语言的语音,包括但不限于英语。Whisper 模型在训练时使用了大量不同语言的语音数据,这使得它具有很好的跨语言能力。Vosk 是一个开源的语音识别库,它可以在离线环境下工作,不依赖于任何外部服务。Vosk 基于Kaldi语音识别框架,支持多种语言,包括中文。Vosk提供了多种预训练模型,可以根据需求选择适合的模型进行语音识别。

weixin_44458771的博客 5937

STGCN+YOLOV8行为分类

使用关节点追踪网络获取关节点数据,以yolo-v8网络为例,获取2D关节点数据。此次实验采用KTH动作识别数据集,包含人步行、慢跑、跑步、拳击、挥手和拍手等动作。

SDADASDAF的博客 3891

JAVA的一次编译,到处运行,你知道多少?

一、对AVA的迷茫   以前只是一味的学习VB,.NET,c#。现在轮到学习java了。迷惑了?书上说:JAVA是一种跨平台语言,最大的优势就是它实现了,一次编译,到处运行的机制。这是什么?跟平台无关?我以前做的VB,.NET,c#程序也没有考虑过平台呀? 学过编译原理的同学或许都知道“语言处理程序”,其实就是编译器。java的“一次编译,到处运行”就跟这个编译器有关。

JJ_nan的博客 967

V.PhyloMaker实战:从物种列表到维管束植物系统发育树的完整流程

本文详细介绍了使用V.PhyloMaker工具包,从物种列表快速构建维管束植物系统发育树的完整实战流程。内容涵盖R包安装、物种名标准化、核心函数phylo.maker的三种构建方案选择、结果树的可视化与导出,以及与picante包的联动分析,为生态学和生物地理学研究提供了高效解决方案。

weixin_29057237的博客 375

【JVM原理详解】01-从一次编写到处运行到JVM

Write Once, Run Anywhere”(WORA)是Java诞生之初最响亮的口号,也是Java能够迅速占领企业级开发市场的核心武器。但这句话背后究竟隐藏着怎样的技术机制?为什么C/C++做不到的事情Java却能实现?本篇将从Java程序的完整生命周期出发,深入剖析字节码在其中的关键角色,带你理解JVM如何作为一座桥梁连接起源码与不同操作系统之间的鸿沟。

gaochufukanyongren的博客 249

Vivado FFT IP核配置与实战:FPGA信号处理硬件加速指南

快速傅里叶变换(FFT)是数字信号处理(DSP)中的核心算法,用于将时域信号转换到频域进行分析。其原理基于离散傅里叶变换(DFT),通过蝶形运算的分解与复用,大幅降低了计算复杂度。在工程实践中,软件实现的FFT难以满足高速实时处理的需求,因此硬件加速方案至关重要。FPGA凭借其并行架构和可定制性,成为实现高性能FFT的理想平台。通过集成专用的FFT IP核,如Vivado中的Pipelined Streaming I/O架构,可以构建流水线化的计算引擎,实现极低延迟和高吞吐量的连续数据流处理。这种硬件方案特

weixin_42536863的博客 646

YOLOv12涨点改进 | 全网独家首发Conv改进篇 | Arxiv 2025 | 引入一种新的WConv加权卷积改进YOLOv12,显著提升其特征提取能力和目标检测精度

本文提出了一种新型加权卷积(WConv)模块,通过引入最优密度函数动态调整邻域像素权重,显著提升了YOLOv12目标检测性能。WConv在保持参数数量不变的情况下,提高了模型精度(VGG准确率提升10%)、增强了小目标检测能力,并改善了多尺度特征提取。文中详细介绍了模块原理、网络结构改进方法,并提供了核心代码实现和yaml配置文件。实验表明,该方法在图像任务中最高可降低53%的损失,虽然会带来11%的时间开销,但具有优异的鲁棒性。该技术可广泛应用于2D/3D图像处理领域。

Ai缝合怪、助力小伙伴高效发论文 215

为什么 Java 能“一次编译,到处运行”?深入理解平台无关性

Java的一次编译,到处运行特性源于其创新的中间层架构。不同于C++等需针对不同平台重新编译的语言,Java通过将源代码编译为平台中立的字节码(.class),再由各平台专属的JVM即时翻译为本地机器指令执行。开发者只需编译一次,生成的字节码可在任何安装了对应JVM的系统(Windows/Linux/macOS等)上运行,实现了真正的跨平台兼容。这种字节码+JVM的设计,使Java在保持高性能的同时,显著降低了跨平台部署的复杂度。

体系化很难,碎片归纳很简单。 538

Python爬取谷歌学术全攻略:基于Playwright与Asyncio的高效、抗反爬虫实践

同时,文章将详细解析爬虫过程中可能遇到的各种挑战,如IP封锁、验证码、动态内容加载等,并提供切实可行的解决方案。self.logger.info(f"第 {current_page} 页解析完成,共找到 {len(page_results)} 条结果。:谷歌学术的HTML结构并非一成不变,其CSS类名和标签结构可能会发生变化,且不同地区、不同语言的界面可能存在差异,增加了数据解析的难度。self.logger.info(f"开始搜索关键词: '{keyword}',计划爬取 {max_pages} 页")

2201_76125261的博客 1550

你可曾知道,Java为什么需要虚拟机?

曾几何时,我们还是初识Hello World的时候,我们那曾知道,Java这门神奇的语言,在执行我们的代码的时候,不是直接将我们所编写的Java代码交付给操作系统底层进行解析编译,而是采用了JDK来对Java代码进行编译,编译成dotClass文件后,将dotClass文件转交至JRE中。(dotClass其实就是.class) jre也就是JavaRunTimeEnvironment,java运行环境,因为在这里,存在着Java的秘密武器,也就是JVM!Jvm是组成JRE的重要核心,可以说,JVM是J.

FNTP_ 14万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java的跨平台魔法:一次编写,到处运行的奇幻之旅

当你的Java程序被编译后,它会转换成一种中间形式的字节码,而不是直接编译成特定操作系统的机器代码。在Java的世界里,有一个广为人知的口号:“一次编写,到处运行”(Write Once, Run Anywhere,简称WORA)。然后,我们把这些卷轴交给JVM这位忠实的魔法使者,它负责在各种操作系统的王国中传播我们的力量。我们不再受限于单一的操作系统,我们的程序可以在不同的世界中自由翱翔。Java的跨平台性不仅仅是一项技术特性,它是一种自由的象征,是对编程世界的一次浪漫告白。

weixin_59997843的博客 416

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JDK,JRE,JVM区别与联系 Java为什么跨平台 ?为什么一次编写,到处运行?

开篇你将学到 JDK JRE JVM 以上三者的区别及联系 Java为什么跨平台 一次编写,到处运行? 先看重点总结 不同平台上 JVM 是不同的,JVM屏蔽了平台的差异, JVM 提供了一个不依赖于底层OS和机器硬件的接口,这正是一次编写,到处运行的原因 JVM的主要工作职责是解释自己的指令集(字节码)并映射到本地的CPU的指令集或者OS的系统调用。 我们平时的开发情况是:利用JDK(调用Java

小风筝 5539

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一次编译处处运行

一次编译处处运行

caikangying的专栏 2094

一篇 聊聊 JVM :Java 之所以能跨平台的底层秘密

本文深入浅出地解析了JVM(Java虚拟机)作为Java跨平台核心的底层原理。首先说明JVM本质是一个虚拟计算机,通过将字节码转换为机器指令实现"一次编写,到处运行"。接着详细拆解JVM四大核心模块:类加载子系统采用双亲委派机制;运行时数据区包含线程私有和共享内存区域(堆、方法区等);执行引擎通过解释器+JIT编译器执行字节码;垃圾回收器采用可达性分析算法和分代回收策略。文章还介绍了常见GC算法和收集器,并强调学习JVM对故障排查和性能调优的重要性。全文以通俗易懂的方式揭示了Java跨平

2401_87662859的博客 229

java只能运行在jvm_当Java平台需要JVM运行时,它是如何独立的?

当Java平台需要JVM运行时,它是如何独立的?我刚开始学习Java,我对平台独立性这个话题感到困惑。“独立”是否意味着Java代码应该在任何机器上运行而不需要安装特殊软件? 然而,JVM需要存在于机器中。例如,我们需要使用Turbo C编译器来编译C / C ++源代码然后执行它。 机器必须有C编译器。当Java被描述为“平台无关”时,有人可以说是什么意思吗?23个解决方案101 votes通常...

weixin_39940688的博客 949

从零开始:你的第一步 Java 编程之旅

无论你在 Windows、Mac 还是 Linux 系统上,只要安装了相应的 JVM,它就能读懂这份字节码指令书,并把它翻译成当前电脑能理解的“语言”(也就是0和1),然后执行。但别担心,Java 作为一门广受欢迎的编程语言,有着清晰的逻辑和丰富的生态,非常适合作为你的入门选择。所以,你只需要编写一份 Java 代码,在任何安装了 JVM 的地方都能运行,省去了为不同平台重复编写代码的麻烦。在编写代码的过程中,有时候我们需要写一些解释性的文字,方便自己或者其他人理解代码的用途。在这里,我推荐你使用。

热爱WebGIS的博客 1158

JVM是如何运行Java代码的

背景知识   作为一名 Java 程序员,你应该知道,Java 代码有很多种不同的运行方式。比如说可以在开发工具中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至可以在网页中运行。当然,这些执行方式都离不开 JRE,也就是 Java 运行时环境。实际上,JRE 仅包含运行 Java 程序的必需组件,包括 Java 虚拟机以及 Java 核心类库等。我们 Java 程序员经常...

weixin_43030648的博客 3447

JDK,JRE和JVM的区别与联系

1.概念: JDK(Java Development Kit)即Java开发工具包。是Java开发环境的核心组件,为Java程序编译,运行和调试提供所有工具,可执行文件和二进制文件,是一个平台特定的软件。JDK目录下包含六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。 bin:最主要的是编译器(javac.exe) include:java和JVM交互用的头文件 ...

slj821的博客 256

详述Java中JVM那些不为认知的秘密

JVM的原理最主要的就是上述内容,当然虽然是最主要的但是也只是冰山一角。如果真的想要了解可以去看看OpenJDK的源码,或者可以看看《深入理解Java虚拟机》这本书。制作不易,望各位大佬赏个脸,给个三连吧!!!!

HarryQUQ的博客 1385

2024终极指南:VOC让Python代码直接运行在JVM上的秘密

想知道如何让Python代码在Java虚拟机(JVM)上运行吗?🚀 VOC正是这样一个神奇的工具!VOC是一个强大的Python到Java字节码转译器,它能够将Python 3.4+代码转换为Java字节码,让你可以在任何支持JVM的平台上运行Python程序。这意味着你可以用Python开发Android应用、企业级Java应用,甚至在大数据平台上运行Python脚本! ## 🔍 VOC是

gitblog_00790的博客 444

Java知多少虚拟机(JVM)以及跨平台原理

相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的。 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。 JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件...

aoqiaotan2763的博客 72

【JVM】JVM加载class文件的原理机制

一、JVM简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java语言的一个非常重要的特点就是与平台的 无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与平台相关的信息,使得Java语

m0_67401606的博客 782
上一篇: 3. 【Java】Hello, World!:第一行 Java 代码
下一篇: 5. 【Java】Java程序的基本结构
gugucoding
博客等级 码龄141天 7粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值