java Java代碼的靜態(tài)編譯和動(dòng)態(tài)編譯中的問(wèn)題是什么?
Java代碼的靜態(tài)編譯和動(dòng)態(tài)編譯中的問(wèn)題是什么?Java代碼通常被靜態(tài)編譯成字節(jié)碼,由相應(yīng)平臺(tái)的JVM加載和執(zhí)行。靜態(tài)編譯無(wú)法動(dòng)態(tài)擴(kuò)展函數(shù)。動(dòng)態(tài)編譯可以通過(guò)兩種方式實(shí)現(xiàn):從源代碼編譯、調(diào)用java編譯
Java代碼的靜態(tài)編譯和動(dòng)態(tài)編譯中的問(wèn)題是什么?
Java代碼通常被靜態(tài)編譯成字節(jié)碼,由相應(yīng)平臺(tái)的JVM加載和執(zhí)行。靜態(tài)編譯無(wú)法動(dòng)態(tài)擴(kuò)展函數(shù)。動(dòng)態(tài)編譯可以通過(guò)兩種方式實(shí)現(xiàn):從源代碼編譯、調(diào)用java編譯器和在JDK(而不是JRE)上運(yùn)行。動(dòng)態(tài)字節(jié)碼生成技術(shù)(如cglib、ASM)創(chuàng)建類(lèi)。動(dòng)態(tài)編譯可以簡(jiǎn)化代碼,增強(qiáng)類(lèi)功能,但也帶來(lái)了代碼的復(fù)雜性,不易在線維護(hù)。
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別有哪些?
對(duì)于服務(wù)器應(yīng)用程序,為了盡量減少環(huán)境的影響,避免開(kāi)發(fā)環(huán)境和聯(lián)機(jī)環(huán)境的差異,以及其他應(yīng)用程序?qū)ν慌_(tái)機(jī)器的影響,即使用動(dòng)態(tài)庫(kù),我們還傾向于打包所有使用的庫(kù)。(最新的想法是打包整個(gè)文件系統(tǒng),比如docker)。所以靜態(tài)鏈接的優(yōu)點(diǎn)是:1。節(jié)省空間:鏈接器將只復(fù)制您使用的對(duì)象。
2. 簡(jiǎn)單的包裝。實(shí)際上,動(dòng)態(tài)庫(kù)的原始名稱(chēng)是共享對(duì)象。如果不準(zhǔn)備共享,使用動(dòng)態(tài)庫(kù)是不好的。除非:
3。應(yīng)用程序是多可執(zhí)行和多進(jìn)程結(jié)構(gòu),因此動(dòng)態(tài)庫(kù)既節(jié)省內(nèi)存又節(jié)省磁盤(pán)空間。
4. 應(yīng)用程序應(yīng)該動(dòng)態(tài)加載進(jìn)程內(nèi)插件:進(jìn)程空間中的多個(gè)靜態(tài)庫(kù)會(huì)讓您煩惱。
什么叫靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)?
靜態(tài)庫(kù)被加載到源代碼中進(jìn)行編譯,例如各種頭文件。
動(dòng)態(tài)庫(kù)被映射到程序的內(nèi)存空間,以便在程序運(yùn)行時(shí)進(jìn)行動(dòng)態(tài)加載,例如DLL文件。