我的blog

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(2)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2009年2月 (1)
  • 2008年7月 (1)
  • 2008年5月 (1)
  • 2008年4月 (1)
  • 2008年3月 (1)
  • 2008年2月 (1)
  • 2008年1月 (4)
  • 2007年12月 (6)
  • 2007年11月 (3)
  • 2007年10月 (2)
  • 2007年8月 (3)
  • 2007年7月 (3)
  • 2007年6月 (1)

文章档案

  • 2007年7月 (2)

搜索

  •  

最新评论

  • 1. re: Java中serialVersionUID的解释
  • @未登录
    eclipse或者myEclipse会自动生成的。
  • --巧克力键盘
  • 2. re: Java中serialVersionUID的解释
  • 评论内容较长,点击标题查看
  • --未登录
  • 3. re: Java中serialVersionUID的解释
  • 懂了,thx
  • --Chris Lee
  • 4. re: Java中serialVersionUID的解释
  • 好
  • --ss
  • 5. re: Java中serialVersionUID的解释
  • TMMMMMMMMMMMD,为啥我今天才知道啊
  • --我是SB

阅读排行榜

  • 1. Java中serialVersionUID的解释 (88899)
  • 2. java中的保留字(3905)
  • 3. weblogic中的domain和server(3845)
  • 4. MyEclipse配置WebLogic(2714)
  • 5. java String[] args(2683)

评论排行榜

  • 1. Java中serialVersionUID的解释 (30)
  • 2. java String[] args(3)
  • 3. java中的保留字(2)
  • 4. MyEclipse配置WebLogic(1)
  • 5. CRM(0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

Eclipse启动机制(摘录Asktalk)

         今天偶尔看了Asktalk的Eclipse启动机制,感觉不错,转载一下:


1
、Eclipse源代码       
eclipse-sourceBuild-srcIncluded-3.3.1.1.zip   
版本:3.3.1.1        大小:95.058MB
下载地址:http://download.eclipse.org/eclipse/downloads

解压后的目录结构如下图,通过执行build.bat可以编译出完整的Eclipse-sdk-3.3.1.1运行包,和我们网上下载的一样。但是这个过程可能需要一个小时左右的时间,要有耐性哦。所有的插件工程目录在plugins中,我们只需要导入现有工程即可把plugins下所有工程导入。

下面我们就先来研究一下Eclipse最核心的部分,就是RCP部分必须的插件。下面我列出了Eclipse RCP需要的插件。

将这些代码解压缩到一个空目录里,然后导入到Source Insight的Project里。     

二、Eclipse启动过程

首先我们从Eclipse的启动过程开始分析。

1、exe部分的引导

eclipse.exe是Eclipse的启动文件,是与平台相关的可执行文件。它的功能比较简单,主要是加载startup.jar文件,代码在Eclipse源代码的eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip,对应多个平台。对于win32平台,你可以直接运行win32目录下的build.bat文件来编译得到它(需要安装C编译器)。

2、java代码部分的执行入口

对于Eclipse 3.3.1.1版本来说,如果在eclipse目录下没有找到startup.jar,则直接执行org.eclipse.equinox.launcher.Main.main方法。

当然我们可以在eclipse目录下定制我们自己的启动引导包startup.jar,现在Eclipse 3.3.1.1好像已经不建议这样做了。如果有这个包,那么这个包将是java代码的执行入口,你可以在命令行下运行java -jar startup.jar命令来启动Eclipse。它的入口是org.eclipse.core.launcher.Main类,这个类最终执行的还是org.eclipse.equinox.launcher.Main.main方法。它对应的源代码在org.eclipse.equinox.launcher目录下的Main.java。关于此文件的定制详细信息请查看eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip中的eclipse.c的注解部分。

我们从main函数往后跟踪,找到basicRun方法,这个是启动的主要部分。

    protectedvoid basicRun(String[] args) throws Exception {

        System.getProperties().put("eclipse.startTime", Long.toString(System.currentTimeMillis())); //$NON-NLS-1$

        commands = args;

        String[] passThruArgs = processCommandLine(args);

       

        if (!debug)

           // debug can be specified as system property as well

           debug = System.getProperty(PROP_DEBUG) != null;

        setupVMProperties();     //设置VM属性

        processConfiguration();   //读取configuration/config.ini配置文件

       

        // need to ensure that getInstallLocation is called at least once to initialize the value.

        // Do this AFTER processing the configuration to allow the configuration to set

        // the install location. 

        getInstallLocation();

        // locate boot plugin (may return -dev mode variations)

        URL[] bootPath = getBootPath(bootLocation);

        

        //Set up the JNI bridge. We need to know the install location to find the shared library

        setupJNI(bootPath);

       

        //ensure minimum Java version, do this after JNI is set up so that we can write an error message

        //with exitdata if we fail.

        if (!checkVersion(System.getProperty("java.version"), System.getProperty(PROP_REQUIRED_JAVA_VERSION))) //$NON-NLS-1$

            return;

       

        setSecurityPolicy(bootPath); //设置执行权限

        // splash handling is done here, because the default case needs to know

        // the location of the boot plugin we are going to use

        handleSplash(bootPath);

        beforeFwkInvocation();

        invokeFramework(passThruArgs, bootPath);    //启动Eclipse内核

    }

posted @ 2007-12-25 15:00 零点 阅读(367) | 评论 (0) | 编辑 收藏
 
java String[] args
*String[] args: args是“参数”的缩写,可以改成任意的名字。
                       args存贮的是命令行参数,可用于程序中。
 *支持从命令行输入参数:
             String[] args这个字符串数组是保存运行main函数时输入的参数 的,例如 main函数所在的类名为test那么你在cmd运行java test a b c时
             args[0]=a,args[1]=b,args[2]=c,你就可以在你的程序中调用你输入的这些变量。

例如:Test.java
     public class Test{
               public static void main(String[] args){
                           System.out.println("args[0] is"+args[0]);
                           System.out.println("args[1] is"+args[1]);
                           System.out.println("args[2] is"+args[2]);
                 }
      }

在cmd中输入程序所需要的参数:
javac Test.java
java Test zhang xiao yu

输出结果:
args[0] is zhang
args[1] is xiao
args[2] is yu
posted @ 2007-12-25 14:49 零点 阅读(2683) | 评论 (3) | 编辑 收藏
 
模式学习--Facade

模式简介:
 意图--一个一致的高层接口
 Facade模式的意图:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Facade模式:关键特征
           意图       希望简化现有系统的使用方法。你需要定义自己的接口。
           问题       只需要使用一个复杂系统的一个子集。或者,需要用一种特殊的方式与系统交互。
           解决方案   Facade向客户展现使用现有系统的一个新的接口。
           参与者与   向客户展现一个定制的接口,让客户更容易地使用现有系统。
           协作者 
           效果       Facade模式简化了对所需子系统的使用。但是,由于Facade并不完整,因此某些功能对于客户可能是不可用的
           实现       定义一个(或一组)新的类来提供所需的接口
                 *让新的类使用现有的系统

1)Facade模式的变体:减少客户必须处理的对象数量
           2)Facade模式的变体:用新的程序对现有功能进行补充
           3)Facade模式的变体:一个“封装”层
              几个需要包装原有系统的理由:
               *跟踪对系统的使用----强迫所有客户通过Facade使用原有系统,然后就可以很容易地监控对系统的使用。
               *改变系统----我可能需要在未来改变我们的系统。如果把原有系统设计成Facade类的私有成员,那么只需作最少的工作就能切断
               一个新的系统。当然,我仍然需要做一些重要的工作,但至少我只要改变一个地方(Facade类)的代码。

posted @ 2007-12-14 10:06 零点 阅读(154) | 评论 (0) | 编辑 收藏
 
java学习---类装载器子系统
类装载器子系统:负责查找并装载类型的那部分被称为类装载器子系统。
java虚拟机有两种类装载器:启动类装载器和用户定义类装载器。
启动类装载器:是java虚拟机实现的一个部分。
用户定义类装载器:java程序的一部分。
posted @ 2007-12-11 10:08 零点 阅读(280) | 评论 (0) | 编辑 收藏
 
ClassFile表中各项简介
java class文件中包含了java虚拟机所需知道的、关于类或者接口的所有信息。
class文件“基本类型”
                u1----1个字节            u2-----2个字节   u4----4个字节  u8----8个字节 
ClassFile表中各项:
                 1)magic(魔数)
                 每个java class文件的前4个字节被称为他的魔数(magic number): 0xCAFEBABE
                 作用:可以轻松地分辩出Java class文件和非java class文件。(如果一个文件不是以0xCAFEBABE开头,他就肯定不是Java class文件)
                 *文件格式定义者能够自由选择魔数,前提是这个选定的魔数值没有被广泛应用。
                 2)minor_version和major_version
                  class文件的下面4个字节包含了主、版本号。通常只有给定主版本号和一系列次版本号后,java虚拟机才能够读取class文件。
                  如果class文件的版本号超出了java虚拟机所能够处理的有效范围,java虚拟机将不会处理该class文件。
                  3)constant_pool.count和constant_pool
                  在class文件中,魔数和版本号后面的是常量池。常量池包含了与文件中类和接口相关的常量。常量池中存储了诸如文字字符串、
                  final变量值、类名和方法名的常量。
                  在动态连接的java程序中,常量池充当了十分重要的角色:
                   字面常量、类和接口的全限定名、字段的名称和描叙符、方法的名称和描叙符
                  4)access_flegs
                  紧接常量池后的两个字节称为access_flags,他展示了文件中定义的类或接口的几端信息。
                  例如,访问标志指明文件中定义的是类还是接口;访问标志还定义了在类或接口的声明中,使用了哪些修饰符;类和接口是抽象的
                  还是公共的;类的类型可以是final,而final类不可能是抽象的;接口不能是final类型
                  5)this_class
                  接下来的两个字节为this_class项,他是一个对常量池的索引。在this_class位置的常量池入口必须为CONSTANT_Class_info表。
                  该表由两个部分组成----标签和name_index
                  标签部分是一个具有CONSTANT_Class值的常量
                  name_index位置的常量池入口为一个包含子类或接口全限定名的CONSTANT_Utf8_info表。
                  6)super_class
                  在class文件中紧接在this_class之后的是super_class项,它是一个两个字节的常量池索引。在supper_class位置的常量池
                  入口是一个指向该类超类全限定名的CONSTANT_Class_info入口。
                  因为java程序中所有对象的基类都是java.lang.Object类,除了Object类之外,常量池入口super_class位置的项为java.lang.Object
                  7)interfaces_count和interfaces
                  紧接着super_class的是interfaces_count,此项的含义是:在文件中由该类直接实现或者由接口所扩展的父借口的数量。
                  8)fields_count和fields
                  在class文件中,紧接在interfaces后面的是对在该类或者接口中所声明的字段的描述
                  9)methods_count和methods
                  在class文件中,紧接着fields后面的是对在该类或者接口中所声明的方法的描述。首先是名为methods_count的计数,它是一个
                  双字节长度的对类或者接口中声明的所有方法的总计数。
                  10)attributes_count和attributes
                  class文件中最后的部分是属性(attribute),他给出了在该文件中类或者接口所定义的属性的基本信息。
posted @ 2007-12-10 16:09 零点 阅读(334) | 评论 (0) | 编辑 收藏
 
java虚拟机的生命周期I
          一个运行时的java虚拟机实例的天职就是:负责运行一个java程序。
*当启动一个java程序时,一个虚拟机实例也就诞生了。
*当该程序关闭退出,这个虚拟机实例也就随之消亡。
如果在同一台计算机上同时运行三个java程序,将得到三个java虚拟机实例。每个java程序都运行在他自己的java虚拟机实例中。
         java虚拟机实例通过调用某个初始化类的main() 方法来运行一个java程序。这个main()方法必须是公有的(public)、静态的(static),返回值为void ,并且接受一个字符串数组作为参数。
任何拥有这样一个main()方法的类都可以作为java程序运行的起点。
        java程序初始化类中的mian() 方法,将作为该程序初始线程的起点,任何其他的线程都是由这个初始线程启动的。
        java虚拟机内部有两个线程:守护线程和非守护线程。
*守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。(守护线程是一种“在后台提供通用性支持“的线程)
*java程序中的初始线程----就是开始于main() 的那个,是非守护线程。
只要还有任何非守护线程在运行,那么这个java程序也在继续运行(虚拟机仍然存活)当该程序中所有的非守护线程都中止时,虚拟机实例将自动自动退出。假若安全管理器允许,程序本身也能够通过调用Runtime类或者System类的exit()方法退出。
posted @ 2007-12-07 10:21 零点 阅读(184) | 评论 (0) | 编辑 收藏
 
java.lang.String.split简单应用
java.lang.String.split(ss)  :
将一个字符串分割为子字符串,然后将结果作为字符串数组返回
ss:用来分割的依据;"\\." 或者"\\\\"

public class Test {

 public static void main(String[] args) {

  String fakeFileData = "D:\\myprojects\\mywork\\11.txt";
  String[] tokens = fakeFileData.split("\\\\");

  for (int i = 0; i < tokens.length; i++) {

   System.out.println(tokens[i]);

  }
 }
}


D:\\myprojects\\mywork\\11.txt 输出结果:
D:
myprojects
mywork
11.txt
output

posted @ 2007-11-21 15:01 零点 阅读(1314) | 评论 (0) | 编辑 收藏
 
Java中serialVersionUID的解释
serialVersionUID作用:
       序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
有两种生成方式:
       一个是默认的1L,比如:private static final long serialVersionUID = 1L;
       一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:
       private static final   long     serialVersionUID = xxxxL;

当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个
     提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会
     自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也
      可以把它关掉的,设置如下:
        Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==>
        Potential programming problems
        将Serializable class without serialVersionUID的warning改成ignore即可。

如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。

如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。

但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。
posted @ 2007-11-15 09:31 零点 阅读(88899) | 评论 (30) | 编辑 收藏
 
Unix操作命令总结
呵呵,希望大家给与指正: 
UNIX的操作:
           1)cp: 拷贝
             cp  源    目标
           //2)mv: 移除文件或目录
           //3)rm: 删除文件
           4)mkdir: 目录的建立  mkdir 绝对路径
              rmdir: 目录的删除  rmdir 绝对路径
              dircmp:比较  dircmp directory1 directory2
           5)ls:显示当前目录的内容(不显示执行权限)
             ls-c :紧凑格式显示
              ls-F :显示文件类型
              ls-l :显示目录详细内容
              ls-R :
           6)chomd :改变文件权限
              chown :改变文件属主 chown -R[-H|-L|-P][-f]{GroupName}file
             id    :查看所在组
              chgrp :改变属主  chgrp -R [-H|-L|-P][-f]{GroupName|GroupID}File
           7)pwd:显示当前用户目录
             cd :回到主目录
             cd file :回到某个目录
           8)compress  : 压缩
              uncompress: 解压缩
           9)tar:打包
                 tar -cvf 把文件打包
                 tar -tvf 列出包中内容
                 tar -xvf 解开打包
           10)diff :比较两个文件的区别
               cls  :清屏命令
               clear:清屏命令
           11)bc   :计算器      ctrl+d :退出
           12)cat  :打开一个文本文件
               more :显示文件内容
               head :显示文件头上部分
               tail :显示文件尾部分
               find :查找文件    find Path-list [Expression-list]  ".":表示根目录
           13)profile:
           14)password :修改用户的密码
               su       :(用户名)切换到另一个用户
               who      :看谁正在登陆系统
     关于vi的用法
           1)vi filename :建一个vi文件
           2)mv: 移除文件或目录
           3)rm: 删除文件
           4)i :字符前插入字符 ,从光标左侧开始添加正文
              a :字符后插入字符 ,从光标右侧开始添加正文
              I :在行首添加正文
              A :在行尾添加正文
              o :当前行的下一行添加正文
              O :当前行的上一行添加正文
              $ :把光标移到行尾
              ^ :把光标移到行首
           5)ctrl+f:向后移一屏
              ctrl+b: 向前移一屏
              
              ctrl+d: 向后移半屏
              ctrl+u: 向前移半屏
           6):w    :写入文件,保存文件
              :w 文件名:保存为新的文件
              :w!   :强制写入
              :q    :退出vi
              :q!   :强制退出
              :x    :保存当前更改并退出
              :qw   :保存当前文件并退出vi
              zz    :存盘退出
            7)dd   :删除当前行
               s    :删除某个字符
               dw   :删除整个单词
               DG   :
              :e!   :恢复原来内容
              cw    :替换一个新单词
              :2,10 d :从2-10行内容删除
              :u      :恢复上次的操作
             8):/ "要查找的单词"  :从文件开始向下查找      
                n     :如果查找到,继续找下一个用“n”
                shift+n:查找上一个
              9)set number   : 显示行号
              10)yy    :复制
                  数字+yy:复制多行,比如15yy(先按esc,然后15,然后yy)
                  p     :粘贴
posted @ 2007-11-14 16:32 零点 阅读(310) | 评论 (0) | 编辑 收藏
 
电脑变慢原因解析
1> 在开机时加载太多程序
  电脑在启动的过程中,除了会启动相应的驱动程序外,还会启动一些应用软件,这些应用软件我们称为随即启动程序。随机启动程序不但拖慢开机时的速度,而且更快地消耗计算机资源以及内存,一般来说,如果想删除随机启动程序,可去“启动”清单中删除,但如果想详细些,例如是QQ、msn之类的软件,是不能在“启动”清单中删除的,要去“附属应用程序”,然后去“系统工具”,再去“系统信息”,进去后,按上方工具列的“工具”,再按“系统组态编辑程序”,进去后,在“启动”的对话框中,就会详细列出在启动电脑时加载的随机启动程序了!XP系统你也可以在“运行”是输入Msconfig调用“系统配置实用程序”才终止系统随机启动程序,2000系统需要从XP中复制msconfig程序。


  2> 桌面图标太多会惹祸
  桌面上有太多图标也会降低系统启动速度。很多用户都希光将各种软件或者游戏的快捷方式放在桌面上,使用时十分方便,其实这样一来会使得系统启动变慢很多。由于windows每次启动并显示桌面时,都需要逐个查找桌面快捷方式的图标并加载它们,图标越多,所花费的时间当然就越多。同时有些杀毒软件提供了系统启动扫描功能,这将会耗费非常多的时间,其实如果你已经打开了杀毒软件的实时监视功能,那么启动时扫描系统就显得有些多余,还是将这项功能禁止吧! 建议大家将不常用的桌面图标放到一个专门的文件夹中或者干脆删除!
3>把windows变得更苗条
  与DOS系统相比,Windows过于庞大,而且随着你每天的操作,安装新软件、加载运行库、添加新游戏以及浏览网页等等使得它变得更加庞大,而更为重要的是变大的不仅仅是它的目录,还有它的注册表和运行库。因为即使删除了某个程序,可是它使用的DLL文件仍然会存在,因而随着使用日久,Windows的启动和退出时需要加载的DLL动态链接库文件越来越大,自然系统运行速度也就越来越慢了。这时我们就需要使用一些彻底删除DLL的程序,它们可以使Windows恢复苗条的身材。建议极品玩家们最好每隔两个月就重新安装一遍windows,这很有效。


  4>桌面上不要摆放桌布和关闭activedesktop
  不知大家有否留意到,我们平时一直摆放在桌面的壁纸,其实是很浪费计算机资源的!不但如此,而且还拖慢计算机在执行应用程序时的速度!本想美化桌面,但又拖慢计算机的速度,在这时,你是否会有一种"不知怎样"的感觉呢?还有一点,不知大家有否试过,就是当开启壁纸时,每逢关闭一个放到最大的窗口时,窗口总是会由上而下、慢慢、慢慢地落,如果有这种情况出现,你必须关闭壁纸!方法是:在桌面上按鼠标右键,再按内容,然后在“背景”的对话框中,选“无”,建议在“外观”的对话框中,在桌面预设的青绿色,改为黑色……至于关闭activedesktop,即关闭从桌面上的Web画面,例如在桌面上按鼠标右键,再按内容,然后在“背景”的对话框中,有一幅壁纸布,名为windows98,那副就是Web画面了!
5> 删除一些不必要的字体
  系统运行得慢的其中一个原因,就是字体多少的关系。安装的字体越多,就占用越多的内存,从而拖慢计算机的速度!所以我们要删除一些不必要的字体。要删除一些不必要的字型,你可到控制面板,再进去一个叫“字体”的文件夹,便可删除字体,但是要怎样才知道,那些字体有用,那些字体没用呢?例如:如果你不常到ms_dos模式的话,就删除dos 字体!因为各个人都可能喜爱某种字型,所以我也不能确定要删除那些字体,不过在这里有个秘决教你,如果你有华康粗黑字型,且又有新细明体的字型,建议你删除华康粗黑字型,如果你有新细明体,且又有细明体,就删除细明体吧!


  6>设定虚拟内存
  硬盘中有一个很宠大的数据交换文件,它是系统预留给虚拟内存作暂存的地方,很多应用程序都经常会使用到,所以系统需要经常对主存储器作大量的数据存取,因此存取这个档案的速度便构成影响计算机快慢的非常重要因素!一般win98预设的是由系统自行管理虚拟内存,它会因应不同程序所需而自 动调校交换档的大小,但这样的变大缩小会给系统带来额外的负担,令系统运作变慢!有见及此,用家最好自定虚拟内存的最小值和最大值,避免经常变换大小。要设定虚拟内存,在“我的电脑”中按右键,再按内容,到“性能”的对话框中,按“虚拟内存”,然后选择"让自已设定虚拟内存设定值",设定"最小值"为64,因为我的计算机是32mbram,所以我就设定为64,即是说,如果你的内存是64mbram,那在"最小值"中,就设为128。顺带一提,在"效能"的对话框中,选择"档案",将原先设定的" 桌上型计算机",改为"网络服务器",是会加快系统运作的;还有,在"磁盘"的对话框中,不要选"每次开机都搜寻新的磁盘驱动器",是会加快开机速度的!


  7>彻底删除程序
  大家都知道,如果想移除某些程序,可到"添加/删除程序"中移除,但大家又知不知道,它只会帮你移除程序,而不会帮你移除该程序的注册码和一些登录项目呢?这不是win98蠢,而是它在这方面不够专业,要彻底删除程序,要找回些“专业”删除软件来移除才成事!先前symantec公司出品的nortonuninstall(以下简称为nud),因为有某部份破坏了某些删除软件的版权,故此全世界已停止出售,正因如此,symantec才出了cleansweep(以下简称为cs),不过论功能上,还是nud更胜一寿!言归正传,其实除了这两个软件外,还有很多同类软件都能有效地移除程序,既然nud已绝版,那我就说cs吧。下载并安装后,如果你想移除程序,只要用cs来移除,它便会一拼移除该程序的登录项目和注册码!
posted @ 2007-10-17 17:47 零点 阅读(175) | 评论 (0) | 编辑 收藏
 
仅列出标题
共3页: 上一页 1 2 3 下一页