本申請(qǐng)涉及計(jì)算機(jī),更具體地,涉及一種接口方法分派方法、裝置、電子設(shè)備以及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、在面向?qū)ο缶幊棠P椭校粋€(gè)“method”描述了object對(duì)象上的一種行為,通常一個(gè)method就是一個(gè)函數(shù)。在art(android?runtime,android應(yīng)用運(yùn)行)虛擬機(jī)中,為某個(gè)method尋找該method的具體實(shí)現(xiàn)的過程稱為“分派”。該“分派”通常可以包括virtualmethod(虛擬方法)分派和interface?method(接口方法)分派,相較于virtual?method分派,interface?method的分派較為復(fù)雜。對(duì)于interface?method來說,一個(gè)類可能實(shí)現(xiàn)了多個(gè)interfaces,或者實(shí)現(xiàn)了一個(gè)interface,但是該interface又繼承了多個(gè)其他的interfaces,因而在實(shí)現(xiàn)某個(gè)interface時(shí),就必須實(shí)現(xiàn)該interface里定義的所有方法,從而會(huì)嚴(yán)重影響interface?method的分派效率,進(jìn)而影響虛擬機(jī)的運(yùn)行效率。
技術(shù)實(shí)現(xiàn)思路
1、本申請(qǐng)?zhí)岢隽艘环N接口方法分派方法、裝置、電子設(shè)備以及存儲(chǔ)介質(zhì),以改善上述問題。
2、第一方面,本申請(qǐng)實(shí)施例提供了一種接口方法分派方法,所述方法包括:在實(shí)現(xiàn)接口方法分派的過程中,從預(yù)設(shè)鏈表中查找目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),所述預(yù)設(shè)鏈表為用于避免哈希沖突而構(gòu)建;若查找到所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),將所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn)所在的節(jié)點(diǎn)從所述預(yù)設(shè)鏈表中剝離;將從所述預(yù)設(shè)鏈表中剝離的節(jié)點(diǎn)插入到所述預(yù)設(shè)鏈表的隊(duì)列頭。
3、第二方面,本申請(qǐng)實(shí)施例提供了一種接口方法分派裝置,所述裝置包括:查找模塊,用于在實(shí)現(xiàn)接口方法分派的過程中,從預(yù)設(shè)鏈表中查找目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),所述預(yù)設(shè)鏈表為用于避免哈希沖突而構(gòu)建;節(jié)點(diǎn)剝離模塊,用于若查找到所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),將所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn)所在的節(jié)點(diǎn)從所述預(yù)設(shè)鏈表中剝離;接口方法分派模塊,用于將從所述預(yù)設(shè)鏈表中剝離的節(jié)點(diǎn)插入到所述預(yù)設(shè)鏈表的隊(duì)列頭。
4、第三方面,本申請(qǐng)?zhí)峁┝艘环N電子設(shè)備,包括一個(gè)或多個(gè)處理器以及存儲(chǔ)器;一個(gè)或多個(gè)程序被存儲(chǔ)在所述存儲(chǔ)器中并被配置為由所述一個(gè)或多個(gè)處理器執(zhí)行,所述一個(gè)或多個(gè)程序配置用于執(zhí)行上述第一方面的方法。
5、第四方面,本申請(qǐng)?zhí)峁┝艘环N計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有程序代碼,其中,在所述程序代碼運(yùn)行時(shí)執(zhí)行上述第一方面的方法。
6、本申請(qǐng)?zhí)峁┑囊环N接口方法分派方法、裝置、電子設(shè)備以及存儲(chǔ)介質(zhì),本方法通過在實(shí)現(xiàn)接口方法分派的過程中,從預(yù)設(shè)鏈表中查找目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),所述預(yù)設(shè)鏈表為用于避免哈希沖突而構(gòu)建;若查找到所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),將所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn)所在的節(jié)點(diǎn)從所述預(yù)設(shè)鏈表中剝離;將從所述預(yù)設(shè)鏈表中剝離的節(jié)點(diǎn)插入到所述預(yù)設(shè)鏈表的隊(duì)列頭。從而通過上述方式實(shí)現(xiàn)了可以將欲查找的目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn)所在的節(jié)點(diǎn)從預(yù)設(shè)鏈表中剝離后,直接插入到預(yù)設(shè)鏈表的隊(duì)列頭,使得下次訪問相同的接口方法的時(shí)候能夠更快的命中,以降低查找的平均時(shí)間,從而提升接口方法的分派效率,進(jìn)而提升虛擬機(jī)的運(yùn)行效率。
1.一種接口方法分派方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述預(yù)設(shè)鏈表包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括接口方法指針、接口方法的實(shí)現(xiàn)、next指針以及prev指針,所述next指針用于指向下一個(gè)節(jié)點(diǎn),所述prev指針用于指向上一個(gè)節(jié)點(diǎn),所述若查找到所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),將所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn)所在的節(jié)點(diǎn)從所述預(yù)設(shè)鏈表中剝離,包括:
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述將從所述預(yù)設(shè)鏈表中剝離的節(jié)點(diǎn)插入到所述預(yù)設(shè)鏈表的隊(duì)列頭,包括:
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述預(yù)設(shè)鏈表包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括接口方法指針、接口方法的實(shí)現(xiàn)、next指針以及prev指針,所述next指針用于指向下一個(gè)節(jié)點(diǎn),所述prev指針用于指向上一個(gè)節(jié)點(diǎn),所述方法還包括:
5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,所述從預(yù)設(shè)鏈表中查找所述目標(biāo)接口方法對(duì)應(yīng)的實(shí)現(xiàn),包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述若所述訪問指針當(dāng)前指向的節(jié)點(diǎn)的接口方法與目標(biāo)接口方法不相同,則將所述訪問指針后移,包括:
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述目標(biāo)接口方法包括最近使用的接口方法、訪問次數(shù)最多的接口方法、訪問頻率大于頻率閾值的方法中的至少一種。
8.一種接口方法分派裝置,其特征在于,所述裝置包括:
9.一種電子設(shè)備,其特征在于,包括一個(gè)或多個(gè)處理器以及存儲(chǔ)器;
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有程序代碼,其中,在所述程序代碼被處理器運(yùn)行時(shí)執(zhí)行權(quán)利要求1-7任一所述的方法。