第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

java程序運(yùn)行時(shí)是如何找到庫函數(shù)并運(yùn)行的?

java程序運(yùn)行時(shí)是如何找到庫函數(shù)并運(yùn)行的?

暮色呼如 2019-03-19 17:15:30
題主是一名C/C++程序員,剛開始學(xué)習(xí)java。疑惑如下:java沒有頭文件,當(dāng)調(diào)用第三方包(無源碼)的方法,編譯器如何保證程序員使用了正確的原型呢?定義包時(shí),為了保證包名唯一,使用package a.b.c語法,包的類需要在文件系統(tǒng)的a/b/c目錄下。但當(dāng)其他java程序使用該包時(shí),這個(gè)路徑信息怎么在運(yùn)行查找這個(gè)包時(shí)體現(xiàn)?某c程序編譯時(shí)依賴庫liba.so,那么運(yùn)行時(shí)系統(tǒng)必須提供庫liba.so,但是java程序編譯時(shí)使用abc.jar,但是運(yùn)行時(shí)可以提供bcd.jar,只要bcd.jar里具有該java程序用到的類就行?(我自己瞎猜的,請(qǐng)問這個(gè)說法對(duì)不對(duì)?)最后,java有沒有類似于《鏈接、裝載與庫》這樣的書籍,或者請(qǐng)大家推薦一些可以了解原理的書籍,能夠解答這些困惑,中英文皆可。感謝。非常感謝大家的解答,試著將各位的回答總結(jié)整理如下:jar包里的class文件中含有文件原型。c/c++的libxxx.so/libxx.a中只有符號(hào),沒有原型,原型由頭文件中提供;java的class文件中即含有原型信息。編譯器只要解析class文件即可知道程序員是否使用了正確的原型。(@fredric_201 與 @心不在焉 )jar包即zip包,里面存在目錄結(jié)構(gòu),該結(jié)構(gòu)與包名結(jié)構(gòu)完全一致(標(biāo)準(zhǔn)jar包,非android jar包)。(@心不在焉 與 @beanlam)說法正確。java程序依賴的實(shí)際是class,jar包只是一組class的zip包,其命名無關(guān)緊要,因此可以任意修改。如果非要和c/C++進(jìn)行對(duì)比,libxx.so類似于.class,而非jar包。(@心不在焉 與 @beanlam)筆者在ubuntu機(jī)器上使用zipinfo查看openjdk自帶的jar包,如下:prife@droi: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib$ zipinfo rt.jar...-rw----     2.0 fat    24298 bl defN 15-Jul-24 08:17 java/lang/String.class-rw----     2.0 fat     1734 bl defN 15-Jul-24 08:17 java/lang/Object.class可以看到rt.jar包里具有跟包名完全一致的目錄結(jié)構(gòu)。最后感謝大家推薦的書籍:《深入理解java虛擬機(jī)》《Java Virtual Machine Specification》PS. 筆者之所以對(duì)第二點(diǎn)看到困惑,因?yàn)樽鳛锳ndroid程序員,發(fā)現(xiàn)安卓的jar包里是只有dex文件,沒有包名的目錄結(jié)構(gòu)。再次感謝大家的解答。
查看完整描述

5 回答

?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊

1,Java的bytecode里面有方法的原型信息,編譯時(shí)有class文件即可
2,Java運(yùn)行時(shí)從classpath里面尋找jar文件,再在jar文件里面找包名對(duì)應(yīng)的a/b/c.class
3,是這樣的

查看完整回答
反對(duì) 回復(fù) 2019-04-20
?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

看一本關(guān)于講解jvm的書,具體的細(xì)節(jié),看看類加載,《深入jvm虛擬機(jī)》。
1、:全類名定義一個(gè)類,每個(gè)類被加載一次。
2、:你是想問怎么找到吧,我覺得和全類名比較類似。
最后個(gè)我沒懂你的意思

查看完整回答
反對(duì) 回復(fù) 2019-04-20
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

我個(gè)人是這樣理解的:
1、c/c++編譯出的庫和java生成jar包這兩件事情是不等價(jià)的,jar包本質(zhì)上只是一個(gè)壓縮包;如果一定要類比,c/c++編譯的過程應(yīng)該相當(dāng)于java生成class文件的過程,也就是代碼轉(zhuǎn)換成機(jī)器(或虛擬機(jī))可以理解并執(zhí)行的文件;
2、JAVA虛擬機(jī)會(huì)把目標(biāo)class文件加載到內(nèi)存里,其中類的信息應(yīng)該放到“方法區(qū)”,被實(shí)例化的時(shí)候,引用在棧、實(shí)例在堆(和c/c++的malloc或new類似)。
3、每一個(gè)類是通過 類加載器 + 包名 + 類名 三部分信息在JVM中唯一標(biāo)識(shí);
4、比較好的書有《深入理解java虛擬機(jī)》、《osgi原理與最佳實(shí)踐》;

查看完整回答
反對(duì) 回復(fù) 2019-04-20
?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

請(qǐng)參考《Java Virtual Machine Specification》第五章:Chapter 5. Loading, Linking, and Initializing


查看完整回答
反對(duì) 回復(fù) 2019-04-20
  • 5 回答
  • 0 關(guān)注
  • 831 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)