技术文摘
执行 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 应用程序能够正确、高效地运行。
- 深入探究 ThreadLocal 的学习笔记
- JavaScript Debugger 原理大揭秘
- JavaScript 中的代理对象
- 工程实践:借助 Asyncio 协程打造高并发应用
- 2021 年前端架构师欲尝试的趋势
- 向 Vite2 官方提 issues 被认定为 Bug 后的收获
- Locustfile 里的 User 类与 HttpUser 类
- Spring 中 Aware 接口的实现原理剖析
- 最简方式发布 Python 应用
- 方法调用:易懂却易懵?
- Vue Router 4 的变化与炫酷特性全解析
- 必刷的动态规划进阶笔试题探讨
- 你了解.Net 中 Swagger 的基础使用吗?
- Sentinel 在接口限流中的应用
- 妹妹质疑:打印数组有何可讲?