我想了解 JAVA的class文件main方法的启动逻辑

java程序中的main方法是如何被调用起来的

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

认知第一点:xxx.java,文件都是要通过javac命令编译成字节码 xxx.class, 然后在通过java来执行class文件。 那这个java 命令到底干了啥? java命令是用c程序编译成的可执行文件, java xxxx, 就可以运行改xxx字节码文件的main方法。 是怎么做到的, 以及我们常说的 main线程又是怎么来的?可以这么想一下 java 后面的命令都是 字符串参数的,java 命令 首先肯定会执行 c程序的main方法,main方法的args就会接收到我们java 命令后面的所有字符串, 之后呢? 在c的main方法里面可定首先要创建jvm,说不定 jvm在 就是一个结构体。 (注意了 这个时候 c的代码可是由 操作系统分配了 进程的主线程在运行这,呃 这里的主线程是一个lwp轻量级进程, 这个进程的pid是和进程一样的);所以jvm是有这个轻量级进程来创建的,现在jvm有了,我们要怎么来调用jxxxx.class的main方法呢?应为java也支持多线程的,所以得由着c层面的代理来进行创建线程,然后回调xxxx.class的main方法。那java层面的thread对象,如何入c创建的操作系统线程进行绑定呢?呃,首先c进行创建线程调用的是linex的底层p_thread方法,还有写操作系统的线程 他不是面向对象的语言, 所以 会由一个 线程描述符id号,ok,现在这个id就是代表着操作系统的原生线程,为了方便使用 jvm得进行包装 成一个osthread对象,用来代表线程id,接着创建javathread,来持有这个osthread, 这也 绑定已经完成了,那现在问题又回到 javathread 怎么和java thread类的对象进行映射, 那肯定是有方法的。映射完成之后 就是 回调 xxx.class的main方法了。

main方法调起大概逻辑

以上为学了码炫课堂 码哥课程的 学习总结, 视频讲得远比这个丰富, 本笔记是自己看完之后的按照自己理解的笔记,慎看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值