技术文摘
执行 Java -jar xxx.jar 时底层的运作机制
当我们在命令行中执行 Java -jar xxx.jar 时,背后隐藏着一系列复杂而有序的运作机制。
操作系统接收到这个执行指令。它会根据文件的扩展名 .jar 识别这是一个 Java 归档文件。然后,操作系统会查找已安装的 Java 运行环境(JRE)。如果 JRE 未安装,或者安装的版本不兼容,执行将会失败。
一旦找到了合适的 JRE,JRE 中的 Java 虚拟机(JVM)就会被启动。JVM 是整个执行过程的核心,它负责加载、解析和执行 Java 字节码。
JVM 会读取 .jar 文件的清单(MANIFEST.MF),以获取关于该应用程序的一些关键信息,例如主类的名称。如果清单中没有指定主类,或者指定的主类不存在,也会导致执行出错。
找到主类后,JVM 会加载该类的字节码,并进行链接操作。链接包括验证字节码的正确性、准备类变量等。
接下来是初始化阶段,在这个阶段,静态变量会被初始化,静态代码块会被执行。
然后,JVM 开始执行主类的 main 方法。在 main 方法的执行过程中,可能会创建新的对象、调用其他方法,涉及到内存的分配和回收。
在内存管理方面,JVM 会利用堆和栈来存储对象和局部变量。垃圾回收机制会定期回收不再使用的对象所占用的内存,以保证系统的性能和稳定性。
JVM 还会处理异常情况。如果在执行过程中发生了未捕获的异常,JVM 会按照异常处理机制进行处理,可能会终止程序的执行,并输出相关的错误信息。
JVM 还与操作系统进行交互,例如进行文件 I/O 操作、网络通信等。
执行 Java -jar xxx.jar 看似简单的一个命令,实际上涉及到操作系统、JRE 和 JVM 等多个层面的协同工作,以及复杂的内存管理、异常处理和资源分配等机制,共同确保 Java 应用程序能够正确、高效地运行。
- 掌握这几个锁用法,多线程理解不再难
- 100 行代码实现疫情地图可视化的原理是什么?
- 程序员应知晓依赖冲突的缘由与解决之策
- Python 助力 Excel 减轻复杂数据处理之痛的方法
- 我用 Python 为女同事头像添加口罩的绝佳契机
- 后端转前端开发,我的所学所得
- 前端开发人员必知的 6 种超好用正则表达式
- Typescript:让我永别 JavaScript
- Github 终向印度“出手”
- Python 编程的常用技巧,你了解多少?
- 技术总监“删库跑路”获刑两年多
- 谷歌公布 GSoC 2020 暑期代码项目名单 含 200 个开源项目及 30 个新增
- 何种数据架构为我们所需?
- 2020 年选择 Go 而放弃 Python 的原因
- 微软开源代码分析器发布