動態編譯和靜態編譯及Java執行


靜態編譯就是在編譯的時候把你所有的模塊都編譯進exe里去,當你啟動這個exe的時候所有模塊都加載進來了。你寫小程序沒問題,但程序一大,加載的過程(就是當你運行程序時初始化的過程)就比較費力了。。大多數ppc的硬件配置還是很一般的。。。。。。
動態編譯就不一樣了,你編譯的時候那些模塊都沒有編譯進去,一般情況下你可以把那些模塊都編譯成dll,這樣你啟動程序(初始化)的時候這些模塊不會被加載,而是在運行的時候,用到那個模塊就調用哪個模塊。。。。。
簡單的打個比方,我寫個閱讀器,支持txt,pdf,udm三種格式,暫時把讀txt,讀pdf,讀udm定義為三個功能模塊。
使用靜態編譯:我想看個txt,點擊應用程序圖標以后三個功能都加載進來了,判斷格式,使用讀txt模塊。。。(在這里,另外兩個模塊的作用就是占用系統資源。。。。-。-)
使用動態編譯:我想看個txt,點擊應用程序,判斷格式,只加載讀txt模塊,使用讀txt模塊。。。
顯然,動態編譯1速度快,2節省了系統資源,3利於今后拓展。。。。。。。。

以下是2個比較形象的解釋:

一個是租自行車,什么時候騎什么時候租,有新車就租新車,沒新車就租舊車,有電動車就省點勁,碰上沒車座子的就扎屁股,人家不出租了你就別用了。
一個是自己買個自行車天天扛着,進電梯上地鐵也扛着。老子自己的車,想什么時候騎就什么時候騎,不用看出租自行車老大媽的臉色。

用靜態鏈接庫編譯,相當於你帶着一個工具包到處跑(遇到有需要的地方不需要周圍的環境提供相應的工具,自己用自己工具包的工具就行了,所以當環境發生變化可以盡可能的無視),當然,你本來不帶任何東西走到哪是哪和工具包隨身帶的區別顯然就是重量增加了,即程序的體積可能會比另一種方式來的大一點,看你的工具包有多大了。

僅此記錄,以作學習之用。

Java編譯時間:是指虛擬機的JIT編譯器編譯熱點代碼的時間,我們知道Java語言的跨平台,編譯出的class文件中存儲的是字節碼,虛擬機通過解釋的方式執行字節碼文件,比起C、C++的本地二進制代碼速度慢很多,JDK1.2后虛擬機內置了兩個運行時編譯器,如果一個Java方法,被調用次數達到一定程度,就會被判定為熱代碼,交給JIT編譯器編譯為本地代碼,提高運行速度,C、C++是靜態編譯,而java是動態編譯

 

區分對比

與動態編譯的區別
動態編譯的 可執行文件需要附帶一個的 動態鏈接庫。在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了 系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的 運行庫,則用動態編譯的 可執行文件就不能運行。
靜態編譯就是 編譯器在編譯 可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so或.lib)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與 動態編譯的可執行文件正好互補。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM