java虚拟机的启动实例--eclipse的方式

简介:
查看eclipse的源代码,有以下一个zip压缩包:
src/plugins/org.eclipse.platform/launchersrc.zip
这是eclipse的启动源码包,解压后有一个launchersrc/library目录,该目录中有一个文件eclipse.c(高一些的版本需要看的是eclipseMain.c),这就是eclipse的带有main函数的主文件,它和一个它依赖的文件最终编译成eclipse这个可执行文件。
      eclipse是由java写成的,然而其启动文件却是一个平台可执行文件-elf/pe,那么一定是eclipse可执行程序启动了java环境。在这些c代码中,最终要调用一个函数:startJavaVM或者launchJavaVM,而这些函数最终有两种实现方式,一种是fork/exec+wait的方式,这样的话当你运行eclipse的时候ps或者查看进程管理器的时候就会发现有两个进程,一个是eclipse,另一个是javaw或者java,它主要的优点是可以自己定义java环境的所在地...另一种方式是直接调用JVM的接口启动java环境,就是类似java程序做的那样,它自己搜索java环境的所在,同时它也是可以指定参数的,程序相对比较紧凑一些。
     既然eclipse只是一个壳,那么我们显然可以绕开这个壳,它无非就是一个和java程序类似的东西,只是更漂亮一些罢了。查看下面目录的源码,发现作者没有改变入口,仍然以main方法为入口,因此完全可以用java命令来启动:
src/plugins/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
这个Main.java是eclipse的启动类,也是被调用的第一个类,其很简单地调用了下面的过程:
org.eclipse.equinox.launcher.Main.main(args);
在下面的目录可以找到这个被调用的main:
src/plugins/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
最终invokeFramework方法被调用,一切正式开始。之所以将启动程序封装成一个平台相关的可执行文件(elf/pe等),其主要原因就是启动很方便,不需要进行命令行输入,任何的GUI上直接点击即可,并且还能定制平台相关的启动风格。使用java命令直接启动eclipse的方法如下:
java -jar $eclipse的目录/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar

eclipse是一个可执行文件,它可能被病毒感染,然而即使它被感染了,直接使用java命令启动的IDE可能还是好的,除非java本身也被感染了...此时还可以自己写启动程序,除非jvm动态库被感染了,此时我们还可以重新下载,除非互联网被感染了!


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271168


相关文章
|
2月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
169 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
19天前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
1月前
|
Java Android开发
Eclipse Java 构建路径
Eclipse Java 构建路径
37 3
|
1月前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
40 4
|
1月前
|
Java Android开发
Eclipse 创建 Java 接口
Eclipse 创建 Java 接口
28 1
|
1月前
|
Java Android开发
Eclipse 创建 Java 包
Eclipse 创建 Java 包
32 1
|
2月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
2月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
1月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
26 0
|
3月前
|
Java
Java——接口的使用实例
Comparable接口用于自定义类的对象比较。通过实现此接口并重写`compareTo`方法,可以定义自定义类型的比较规则。 接下来介绍了Comparator接口,它提供了一种更灵活的比较方式。通过实现Comparator接口并重写`compare`方法,可以根据不同属性定义不同的比较规则。例如,定义一个`BrandComparator`类来比较汽车的品牌。 最后,介绍了Cloneable接口,用于实现对象的克隆。实现该接口并重写`clone`方法后,可以创建对象的浅拷贝或深拷贝。浅拷贝仅复制对象本身,深拷贝则会递归复制所有成员变量。
40 4
Java——接口的使用实例

推荐镜像

更多