加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

没想到进入Main函数前

发布时间:2021-03-25 13:14:08 所属栏目:传媒 来源:互联网
导读:对C/C++这样的native语言,从操作系统(Linux Windows)的层面去探讨了程序的启动过程,而对Java、Python这样的基于虚拟机/解释器的语言并未提及。 今天,咱们就一起来探索下在Java语言中,你写的main方法又是怎么被执行到的? 对于Java而言,其底层是Java虚拟

对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打开可以看到,这个可执行文件的入口:

(编辑:江门站长网)

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

    热点阅读