|
对C/C++这样的native语言,从操作系统(Linux & Windows)的层面去探讨了程序的启动过程,而对Java、Python这样的基于虚拟机/解释器的语言并未提及。
今天,咱们就一起来探索下在Java语言中,你写的main方法又是怎么被执行到的?
对于Java而言,其底层是Java虚拟机在跑着,也就是JVM,这篇文章如无特殊说明,默认以Hotspot为研究对象。
先来回顾一下那篇文章,对于C/C++程序而言,从创建进程到进入main函数,主要就是经历了四个阶段:
-
进程 & 主线程创建阶段
-
主线程启动执行并进行进程级初始化操作(如加载系统动态链接库)
-
主线程进入可执行文件的入口(OEP)并进行C/C++运行时库初始化
-
从C/C++运行时库调入main函数
你知道的,Java的虚拟机JVM主要是C++编写的,所以JVM本质上也算是一个C++程序。
因此,上面的四个阶段,对于JVM而言,同样适用。
只不过呢,对于C/C++程序而言,到这里就已经进入main函数了,话题就可以结束了,而对于Java程序,执行到JVM的main,一切才刚刚开始。
JVM的main
故事,要从JVM的main函数开始讲起···
你应该知道的,不管你是普通Java程序,还是用的Spring或者其他什么框架,最终的程序都是在一个Java进程中运行的,这个进程的可执行文件就是一个exe(windows上)或者elf(linux上)。
咱们就从这个可执行文件入手,以Linux系统上的Java8版本为例,用反汇编神器IDA打开可以看到,这个可执行文件的入口:

(编辑:江门站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|