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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

5 回答

?
千萬里不及你

TA貢獻1784條經(jīng)驗 獲得超9個贊

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

查看完整回答
反對 回復 2019-04-20
?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

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

查看完整回答
反對 回復 2019-04-20
?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

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

查看完整回答
反對 回復 2019-04-20
?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

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


查看完整回答
反對 回復 2019-04-20
  • 5 回答
  • 0 關(guān)注
  • 835 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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