Eclipse 启动分析
来源:互联网 发布:淘宝宝贝标题如何优化 编辑:程序博客网 时间:2024/05/22 21:18
[本文主要来自eclipse 3.3 的帮助文档,其中带[]个人的分析和注解] 更新Eclipse 3.6[2010.12.16]
启动过程:
Eclipse本地启动者分两个部分:
1 eclipse.exe
2 一个共享库(eclipse_1017.dll) eclipse_1017.dll 在plugin 目录下以插件的fragment 形式出现org.eclipse.equinox.launcher.[config]。
为什么要这样设计呢?因为这样可以通过eclipse update 更新eclipse_1017.dll,并且在使用java 直接启动eclipse 时,可以用java 调用JNI 来访问eclipse_1017.dll 以打开splash screen.
启动者插件(The launcher bundle):
老版本的eclipse 在安装目录中有一个 startup.jar jar 文件。在 eclipse 3.3 中,这个文件被放到插件org.eclipse.equinox.launcher 中。eclispse 依然可以用这个java
jar 文件来直接启动:java -jar plugins/org.eclipse.equinox.launcher_版本号.jar。
[注:本人在Mac OS X 上测试,eclipse 不能启动。Windows XP 可以。这样启动还是有问题的,如eclipse 不能重新启动(File-->restart)。]
[大体的启动过程是这样的:由Eclipse 本地启动者(即eclipse.exe 调用eclipse.dll)调用启动者插件。所以下面把eclipse 启动分为三步。]
启动eclipse 主要包括3 部分: (即 Eclipse 本地启动者调用 launcher.jar)
1 一个本地的可执行文件,在windows 系统中为eclipse.exe 文件(对应的eclipse 工程为org.eclipse.equinox.executable.)
2 一个平台相关的fragment 启动者 (对应的eclipse 工程为org.eclipse.equinox.executable.)
(CVS:pserver:anonymous@dev.eclipse.org:/cvsroot/rt
org.eclipse.equinox/framework/bundles/org.eclipse.equinox.executable)
3 一个launcher.jar jar 文件 (对应的eclipse 工程为org.eclipse.equinox.launcher.)
(CVS:pserver:anonymous@dev.eclipse.org:/cvsroot/rt
org.eclipse.equinox/framework/bundles/org.eclipse.equinox.launcher )
其中这个fragment,必须以文件夹的形式出现在plugin 目录下,以为只有这样,eclipse.exe 才能加载它。
目录结构如下:
eclipse/ eclipse.exe
plugins/
org.eclipse.equinox.launcher_1.0.0.v20070606.jar
org.eclipse.equinox.launcher.win32.win32.x86_1.0.0.v20070523/
eclipse_1017a.dll
注意:不同版本的eclispe, 对应的上述的版本号有变化
[下面解决本地代码(C 代码)调用jvm 来启动org.eclipse.equinox.launcher。有两种方式:1 在一个新的进程中来启动vm(这是通过调用java.exe/javaw.exe来实现的),另一种是通过invocation api 在同一个进程中加载java 虚拟机。下面介绍eclipse 是如何选择用什么方式来运行jvm]
寻找一个java 虚拟机和使用jni invocation api
eclipse 启动者在eclipse 进程中使用java native interface invocation api 加载java 虚拟机。启动者仍然可以像先前的eclispe 版本中那样,在一个分开的进程中启动JVM。究竟采用哪种方法来启动,取决于启动者如何找到VM。
1 当没有 -vm 参数时,启动者在eclipse 根目录中的一个jre 路径中寻找VM,然后在搜索path 环境变量。如果java 被找到,启动者在相对java 可执行文件的路径中,寻找一个jvm 共享库(在windows 上为jvm.dll, 在linux 上为libjvm.so )。
1) 如果一个jvm 共享库被找到,启动者加载它,并用jni invocation api 来启动VM。
2) 如果一个jvm 共享库没有被找到,启动者执行在一个新的进程中启动java 启动者(java.exe/javaw.exe)来启动vm。
2 -vm 被特殊化,在命令行中,或者在eclispe.ini 中
eclispe 可以通过"-vm <location>" 来选择哪个VM 被使用。<location> 这个值有几种可能的取值。
1) 路径(directory):<location> 是一个路径。我们将在这个路径中寻找: (1) 一个java 启动者 or (2) jvm 共享库. 如果找到了jvm 共享库, 我们调用JNI invocation.
如果找到一个java 启动者, 则在这个路径下找jvm 共享库. 如果我们找到了, 调用JNI invocation. 如果没有找到jvm 共享库, 在一个新的进程中执行java。
2) java.exe/javax.exe:<location> 是一个java 启动者路径。我们在一个新的进程中执行java 启动者来启动VM。
3) jvm dll 或so:<location> 是一个jvm 共享库的路径。我们尝试加载这个库,并在当前进程中使用jni invocation api 来启动vm。
例外情况:
linux.ppc, linux.x86_64, aix.ppc: The launcher is not able to load some older vms using the JNI invocation API. By default on these platforms the launcher will prefer to execute java in a separate process. To force the launcher to load the vm using JNI, specify a -vm option pointing directly to the vm's shared library (libjvm.so).
MacOSX: The launcher uses the system JavaVM framework and will always load the vm in-process using the JNI invocation API.(在苹果的mac 系统中,永远采用在进程内加载jvm 来运行java 程序)
CVS 的变更可以参考:http://wiki.eclipse.org/Equinox_Eclipse_to_RT_Migration
- Eclipse 启动分析
- Eclipse启动故障一例分析
- Eclipse启动慢分析及解决方案
- [Eclipse] Eclipse 的启动与调试--扩展与分析
- Eclipse启动优化,分析其GC过程【转】
- Eclipse启动优化,分析其GC过程【转】 收藏
- Eclipse启动
- 启动分析
- Eclipse无法启动,启动时闪退
- 启动eclipse闪退,无法启动eclipse
- Eclipse:启动Eclipse打不开,一闪而过
- eclipse 无法启动,eclipse 快捷键
- Eclipse, Lomboz and Tomcat 的 JSP 调试(dawave)之补充-tomcat配置与启动分析
- Eclipse启动后报“Decoration Calculation”并异常崩溃问题分析及解决办法
- eclipse 启动服务后,部署的文件一直是旧的文件的原因分析
- eclipse启动参数研究
- eclipse启动参数研究
- Eclipse启动过程
- 全世界最全牛人博客,你可以学习到太多太多
- ACM必练50题
- hibernate3.X二级缓存的使用
- 无线共享上网图解
- 看书练习
- Eclipse 启动分析
- Hibernate缓存机制
- 触发器 真好用 哈哈
- 网络日志(2010.5.8)
- MyEclipse Enterprise Workbench 8.5
- 动力节点王勇-Java Web项目视频【DRP完整版】
- Webcast 系列课程
- Linux命名管道FIFO的读写规则
- 虚拟机linux 网络配置,ping不通,不能上网请试试这个(图文)