Jvm(jdk8)源码分析1-java命令启动流程详解

本文介绍了从java命令启动到JVM运行的详细流程,包括如何找到入口函数、JVM的加载和初始化。通过GDB调试工具分析了Linux环境下Java的启动代码,揭示了main函数的位置以及JLI_Launch函数在启动过程中的作用。文章还探讨了SelectVersion、CreateExecutionEnvironment、LoadJavaVM等关键步骤,为深入理解Java启动原理提供了基础。
摘要由CSDN通过智能技术生成

1.概述

现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架(如目前比较流行ssi或者ssh框架),但是对于java语言本身的理解才是本质。如果你熟悉jvm原理以及jdk本身的实现,我相信对于其他开发框架的学习和深入理解应该不是很困难,因为很多灵活和高大山的框架都使用了jdk最核心的功能。除了本身框架的使用之外,凡是使用java语言开发的系统都避免不了对jvm的调优(对于系统性能要求不高可能不需要,但是对于互联网公司来说性能好像是对系统的基本要求)。如果能够深入掌握jvm原理,对于调优jvm和解决各种java相关问题是很有帮助的,当然写的java代码自然质量是很高的。

虽然我以前使用java进行编码的时间很少,对很多java的高级功能也不是很熟悉,对于jvm原理和调优也是一知半解,但是这不影响我对jvm本身原理及代码实现的学习和研究。以前研究和学习linux的源代码就觉得其乐无穷,相信现在研究jvm的源码应该也有同样的感受,并且将有非常大的收获。

正好现在java 8已经推出,业界对java8也是比较满意。作为自己学习和研究完全就可以从java8开始了,直接通过hg工具(类似git)下载jdk8的源代码进行研究学习:hg clone http://hg.openjdk.java.net/jdk8/jdk8。下载源码以后就可以开始编译了,具体请查看帮助文档吧。编译完成以后就可以运行java或者javac等相关命令了。

2.Java启动

在学习源码的时候,首先需要找到程序入口函数main,但是由于源代码太庞大而且可能有多个main函数,那么怎么可以快速的找到真正的入口main函数呢?这里在linux就可以借助调试工具gdb了。例如我们要快速找到java的启动入口函数,首先执行下面的命令gdb ./java会出现如下的信息:

GNU gdb (Ubuntu 7.8-1ubuntu4) 7.8.0.20141001-cvs

Copyright (C) 2014 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from ./java...done.

(gdb) 

然后就进入了gdb的命令行了,这个时候使用l命令就可以看到启动文件的代码了,如下:

(gdb) l

80 char **__initenv;

81

82 int WINAPI

83 WinMain(HINSTANCE inst, HINSTANCE previnst, LPSTR cmdline, int cmdshow)

84 {

85     int margc

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔷薇理想人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值