使用工具:Eclipse Stardard 4.32版本(window7环境)
今天我们通过一个及其简单的例子来分析一个java程序是如何在我们的及其上跑起来的。部分内容是参考其他人的,会在参考的地方注明。
我的测试代码部分如下:
public class Test { public static void main(String[] args) { new Test(); Int test =1;//只是为了测试方便,去掉IO部分的分析 } } |
就是这么简单的代码,如何在我们的机器上跑起来,确实是需要一件很折磨人的事情
首先我们了解一下,我们的Eclipse是如何启动的.
参考书籍:Java编程思想(第四版) 深入理解java虚拟机(周志明著)
在这里我就不重复罗嗦详细的原理,因为那不是我想要说的,我想分析的是最简单的java程序是如何跑起来
的,而非一个exe是如何跑起来的
第一个步骤:
我们都会去双击一个eclipse.exe程序,然后会出现启动页面. 这个过程是会去读取相同目录下的配置文件eclipse.ini,读取出eclipse所需要运行的一些参数, 比如我们安装的jdk/jre路径在哪,在jdk1.5版本之前,在eclipse.ini中我们会发现-vm参数,但是后 续版本却没有该参数了,原因是后续版本的java程序不一定运行在sun的hotspot虚拟机中,也可能 运行其他虚拟,因此在后续版本中取消了该参数,然后会读取到启动eclipse程序的jar包startup.jar 我们通过解压\plugins\org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar(不同版本后面的 参数会不一样)会发现启动的Main类,然后通过Main类的静态方法main(String args)就会调用一系 列与本机有关的参数,通过JNI接口来调用本地方法启动我们的Eclipse了如果你感兴趣,可以读取上 面的四个参考博客,讲述的非常详细. |
第二个步骤:
我们会运行我们编写好的代码,虽然我们只是在Eclipse点击了一个运行按钮,但是Eclipse却是
调用了我们安装在本机的jdk/bin中的工具,去启动我们的JVM,然后加载我们的类调入内存
中执行,因此我们所需要分析的就是这个步骤,究竟我们写好java代码,是怎么运行起来的.而我
们能做的就是通过调试跟踪源码的走向,来分析,JVM究竟做了哪些封装好的事情.
第三个步骤:
好了,我们开始吧.
我们在new Test()处设置好断点,然后右键以debug模式运行,会出来下面图片