首页/新闻资讯/正文详情

Java程序从编译到运行的过程

发布时间:2026/9/24 13:10:34 来源:云帆数科 栏目:资讯中心
Java程序从编译到运行的过程
上一篇写了Java为什么能跨平台这篇接着聊聊一个Java程序从源代码到真正跑起来中间到底经历了哪些步骤。## 一、编译期源代码变成字节码我们写的.java文件首先要经过javac编译器处理。javac会把我们写的.java源代码编译成.class字节码文件。这个过程就是把我们能看懂的Java代码翻译成JVM能识别的中间指令字节码。注意这一步产出的不是机器码而是跟平台无关的字节码这也是Java能跨平台的基础上一篇已经讲过了。简单说编译期就是 javac 把 .java 变成 .class 的过程。## 二、运行期JVM加载并执行字节码编译好的.class文件接下来就要交给JVM来运行了。运行期又可以细分成几个阶段### 1. 类加载阶段JVM首先会把.class文件加载进来。这个过程叫类加载大致经历加载、验证、准备、解析、初始化这几个步骤。简单理解就是JVM把字节码读进来检查一遍没问题然后放到内存里准备执行。### 2. 混合模式执行字节码加载进来之后JVM怎么执行它呢这里用到的是混合模式——也就是解释执行和JIT即时编译结合在一起。- 解释执行JVM逐行把字节码解释成机器码执行。优点是启动快不用等编译完就能跑缺点是如果一段代码反复执行每次都要重新解释效率不高。- JIT编译即时编译JVM会监控代码的执行情况如果发现某段代码执行得特别频繁叫热点代码就会把它编译成本地机器码缓存起来。下次再执行这段代码的时候就直接跑编译好的机器码速度就快很多。所以JVM不是单纯的解释器而是解释 编译混合用刚启动的时候主要靠解释执行让程序快速跑起来跑着跑着热点代码被JIT编译成本地码后面越跑越快。## 三、总结整个过程串起来就是1. 编译期javac 把 .java 源代码编译成 .class 字节码2. 运行期JVM 加载 .class 字节码3. 执行JVM 用混合模式执行——解释执行 JIT即时编译热点代码理解了这个过程就能明白为什么Java有时候启动慢但跑起来之后性能还不错——启动时在解释执行等热点代码被JIT编译之后就快了。

相关推荐

CAN总线分析仪软件对比:CANTest、ZCANPro、USB-CAN Tool实战评测
CAN总线分析仪软件对比:CANTest、ZCANPro、USB-CAN Tool实战评测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:10:28

HI3798MV100芯片深度解析:MG101刷机避坑与救砖实战指南
HI3798MV100芯片深度解析:MG101刷机避坑与救砖实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:10:28

上位机开发实战路径:C# WinForm/WPF与工业串口深度应用
上位机开发实战路径:C# WinForm/WPF与工业串口深度应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:10:28

Ceph 三大存储接口之 RGW 对象存储深度梳理
Ceph 三大存储接口之 RGW 对象存储深度梳理

Ceph 对象存储基于 Ceph RADOS Gateway(RGW),Ceph 实现兼容 S3、Swift 协议的对象存储,无需修改底层 RADOS 集群,对外提供 HTTP/HTTPS 对象访问能力。一、什么是 Ceph 对象网关 RGW RGW(RADOS Gateway&… · 2026/9/24 13:35:55

【Dv2Admin】实现CRUD日期窗口时间通用选择组件
【Dv2Admin】实现CRUD日期窗口时间通用选择组件

在现代应用的开发中,用户友好的交互设计是关键,尤其是在处理时间选择功能时。一个直观且高效的时间范围选择组件不仅可以简化用户操作,还能大幅提升应用的使用体验。本文将通过实际案例,指导开发者如何使用Vue.js框架快速集成自定义的时间范围选择组件,并利用封装的快捷选… · 2026/9/24 13:35:49

【Dv2Admin】实现框架以外跳过认证页面配置
【Dv2Admin】实现框架以外跳过认证页面配置

在现代Web应用开发中,前后端分离是主流架构,但某些特定场景中会遇到需要在现有框架内进行功能扩展的需求。本文将探索如何在前端框架中嵌入Web页面应用,并通过后端API接口提交数据。这种方式虽然不推荐,但提供了一个思路,帮助解决实际开发中的问题。 在本文中,校园管理系… · 2026/9/24 13:35:30

PyTorch3D 数据集加载指南:ShapeNetCore 与 R2N2 数据加载器深度解析
PyTorch3D 数据集加载指南:ShapeNetCore 与 R2N2 数据加载器深度解析

人工智能深度学习计算机视觉图形学 【免费下载链接】pytorch3d PyTorch3D is FAIRs library of reusable components for deep learning with 3D data 项目地址: https://gitcode.com/gh_mirrors/py/pytorch3d 点击查看 免费下载 本文是 PyTorch3D 官方数据加载笔记… · 2026/9/24 13:35:30

【Dv2Admin】CRUD数值筛选区间选择组件
【Dv2Admin】CRUD数值筛选区间选择组件

在现代数据驱动的应用中,数据的筛选和搜索功能是用户体验的重要组成部分。如何设计出一个直观、便捷的交互方式,帮助用户高效、准确地输入数据,成为开发者关注的重点。滑动条作为常见的用户界面元素,凭借其简洁和直观的特点,尤其在数值范围选择场景中表现出色。然而,如何… · 2026/9/24 13:35:30

Flask HTTP方法
Flask HTTP方法

在Web开发中,HTTP方法定义了客户端与服务器之间的交互方式。理解并掌握这些方法是构建Web应用的基础。Flask作为一个轻量级Web框架,提供了简洁的方式处理各种HTTP请求。通过Flask,可以清晰地定义不同请求方式对应的处理逻辑,构建灵活而强大的应用程序。 本教程将围绕Flask… · 2026/9/24 13:35:30

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码