上一篇写了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编译之后就快了。
Java程序从编译到运行的过程
张小明
前端开发工程师
医疗APP私域运营:从线上引流到社群转化的完整路径
/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …
FPGA/DSP供电选型:3A低噪声LDO的瞬态响应与国产替代评估
/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …
串口被独占?嵌入式调试中多工具共享串口的解决方案
/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …
新电脑开箱后必做:驱动安装、系统优化与BIOS设置全流程
/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …
PyTorch从零实现CNN图像分类:完整代码与避坑指南
/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …
Seelen UI:Rust+Tauri打造的Windows平铺窗口管理器,GitHub 18000+ Star
/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …