天天看點

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

繼續閱讀