Main方法的执行过程是怎样的


今天就跟大家聊聊有关Main方法的执行过程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一个简单的Main方法但是如上执行的话我们是没办法调试的,
因此java Mm命令不要直接执行,用gdb模式执行
所以我们要先编译一版openJDK,具体编译OpenJdk代码过程自行百度,推荐用Windows商店的ubuntu系统编译以下是OpenJdk源码,fork别人的启动调试后gdb进入这里会自动停下,这就是最开始的地方
/mnt/d/code/openjdk-jdk8u-master/jdk/src/share/bin/main.c继续调试之后找到
/mnt/d/code/openjdk-jdk8u-master/jdk/src/share/bin/java.c方法,如下
FindBootStrapClass这个方法里查找了jdk里的这个类sun.launcher.LauncherHelper,这个类是c++和java代码沟通的桥梁了,LauncherHelper实例化时会实例化一个系统类加载器AppClassLoader之后再去寻找执行类的Main方法并执行,就是c++调用java方法,sun.launcher.LauncherHelper#checkAndLoadMainLauncherHelper.checkAndLoadMain 这个方法中会通过Class.forName()查找Mm这个类,根据双亲委派机制肯定会调用虚拟机的类加载器虚拟机返回空所以还是回到了java代码中的AppClassLoader类加载器中父类URLClassLoader的defineClass方法中去搜索Mm.class,找到之后再去调用虚拟机方法存储当前的类在之后虚拟机会真正调用Mm的Main方法虽然Main方法中有调用
Mm mm = newMm(); 方法,但是再也没有走到类加载器,因为之前已经加载过 香港云主机总结1.首先main方法执行需要一个操作来启动,像java Mm这种命令2.这种命令首先是操作系统解析找到java命令属于jdk的东西,并调用jdk的的启动函数, 就像windows的双击操作一样,双击肯定是操作系统搞了什么小动作打开了软件3.当操作系统调用了虚拟机的命令后,虚拟机会拿到命令的参数比如 Mm,然后去找编译后的文件4.虚拟机找到文件后会调用jdk中的java代码,找到这个类sun.launcher.LauncherHelper,这个类作为一个工具类,作为桥梁链接了c++和java代码5.调用sun.launcher.LauncherHelper类的checkAndLoadMain方法,通过这个方法找执行类Mm的Main方法6.加载好之后执行Main有关类加载器一个问题java虚拟机书中解释了new对象的过程肯定会先检查这个指令的参数能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过,如果不存在,再去实行类加载过程。看完上述内容,你们对Main方法的执行过程是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: Centos 7如何利用yum安装apache+mysql 8+php7

这篇文章主要讲解了“Centos 7如何利用yum安装apache+mysql 8+php7 ”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Centos 7如何利用yum安装apache+mysql 8+php…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/14 19:57
Next 08/14 19:57

相关推荐