本申請涉及計算機編程語言技術領域,尤其涉及一種調(diào)用java對象、java對象的引用地址信息的存儲方法及裝置。
背景技術:
java語言是一種面向對象的程序設計語言,在編程過程中java語言撰寫的代碼解釋性強,從而使得java語言被廣泛使用,在日常生活中一些常用的瀏覽器中的javaapplet由java語言所編寫的。java語言使用的過程中通常需要定義或聲明類,類中可以包含方法和數(shù)據(jù)。當調(diào)用類中的方法或數(shù)據(jù)時,需要先將該類實例化生成java對象,再通過該java對象來調(diào)用該類中的方法或數(shù)據(jù)。
實際應用中可能會出現(xiàn),同一應用中某個模塊的代碼通過java語言編寫,而其它模塊的代碼通過java語言之外的其它語言(例如c語言、c++等)編寫,或者應用和系統(tǒng)的代碼分別由java語言和其它語言編寫。因此程序在運行時,需要java語言能夠和其它語言能夠互相識別和調(diào)用。其中,其它語言在調(diào)用java語言的類中的方法時,也需要通過調(diào)用該類生成的java對象。當前,一般會通過java本地接口(javanativeinterface,jni)來解決其它語言調(diào)用java對象的問題。java本地接口jni通過提供多個應用程序編程接口(applicationprogramminginterface,api),使得其它語言能夠通過這些api實現(xiàn)java對象的調(diào)用。
實際應用中,當其它語言的代碼較長時,該代碼運行過程中通常還會出現(xiàn)需要重復調(diào)用同一個java對象的情況。這時候為了便于調(diào)用,現(xiàn)有技術通常會將該java對象的引用地址,在java本地接口jni通過該語言建立的數(shù)據(jù)表中進行保存。該語言的代碼當需要調(diào)用該java對象時,通過查詢該數(shù)據(jù)表來獲取該 java對象的引用地址,從而實現(xiàn)對該java對象的調(diào)用。
這種現(xiàn)有技術的問題是,由于受到語法規(guī)則的限定,java本地接口jni通過該語言建立的數(shù)據(jù)表,通常只能保存較少量的java對象的引用地址。因此將java對象的引用地址保存在該數(shù)據(jù)表中,當需要調(diào)用的java對象的數(shù)量較多時,通常會出現(xiàn)java對象調(diào)用出錯的現(xiàn)象。
技術實現(xiàn)要素:
本申請實施例提供一種調(diào)用java對象、java對象的引用地址信息的存儲方法及裝置,用于解決現(xiàn)有技術中其它語言的代碼調(diào)用java對象時,由于java本地接口jni通過該語言建立的數(shù)據(jù)表中,只能保存少量的java對象的引用地址,導致java對象效用出錯的問題。
本申請實施例提供了一種調(diào)用java對象的方法,該方法包括:
觸發(fā)指定語言的代碼對java對象的調(diào)用指令;
通過所述調(diào)用指令查詢第一數(shù)據(jù)表,確定所述第一數(shù)據(jù)表中是否保存有所述java對象的引用地址信息,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù);
當存在時,通過所述java對象的引用地址信息調(diào)用所述java對象;
當不存在時,通過java本地接口jni調(diào)用所述java對象。
優(yōu)選地,所述java對象的引用地址信息具體包括與所述java對象的引用地址相關聯(lián)的唯一標識符;則,
所述通過所述java對象的引用地址信息調(diào)用所述java對象具體包括:
通過與所述java對象的引用地址相關聯(lián)的唯一標識符調(diào)用jni引用管理組件來獲取所述java對象的引用地址,并根據(jù)所獲取的java對象的引用地址調(diào)用所述java對象,所述jni引用管理組件用于管理所述指定語言的代碼通過java本地接口jni對java對象的調(diào)用。
優(yōu)選地,在通過java本地接口jni調(diào)用所述java對象之后,所述方法還包括:將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表。
優(yōu)選地,所述將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表具體包括:
生成與所述java對象的引用地址相關聯(lián)的唯一標識符,并將所述唯一標識符存儲在第一數(shù)據(jù)表。
優(yōu)選地,所述方法還包括:在java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表中,刪除所述java對象的引用地址信息。
優(yōu)選地,其特征在于,
所述指定語言的代碼具體包括c語言的代碼和/或c++語言的代碼;和/或,
所述第一數(shù)據(jù)表具體包括java本地接口jni通過java語言所建立的數(shù)據(jù)表。
本申請實施例還提供一種java對象的引用地址信息的存儲方法,該方法包括:
當接收指定語言的代碼對java對象的調(diào)用指令時,通過java本地接口jni獲取所述java對象;
將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù)。
本申請實施例還提供一種調(diào)用java對象的裝置,該裝置包括:觸發(fā)單元、判斷單元、第一調(diào)用單元和第二調(diào)用單元,其中:
所述觸發(fā)單元,用于觸發(fā)指定語言的代碼對java對象的調(diào)用指令;
所述判斷單元,用于通過所述調(diào)用指令查詢第一數(shù)據(jù)表,確定所述第一數(shù)據(jù)表中是否保存有所述java對象的引用地址信息,若是,則觸發(fā)第一調(diào)用單元,若否,則觸發(fā)第二調(diào)用單元,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù);
所述第一調(diào)用單元,用于通過所述java對象的引用地址信息調(diào)用所述java 對象;
所述第二調(diào)用單元,用于通過java本地接口jni調(diào)用所述java對象。
優(yōu)選的,所述java對象的引用地址信息具體包括與所述java對象的引用地址相關聯(lián)的唯一標識符;則,
所述第一調(diào)用單元具體包括第一調(diào)用子單元,用于通過與所述java對象的引用地址相關聯(lián)的唯一標識符調(diào)用jni引用管理組件來獲取所述java對象的引用地址,并根據(jù)所獲取的java對象的引用地址調(diào)用所述java對象,所述jni引用管理組件用于管理所述指定語言的代碼通過java本地接口jni對java對象的調(diào)用。
本申請實施例還提供一種java對象的引用地址信息的存儲裝置,該裝置包括:獲取單元和存儲單元,其中:
所述獲取單元,用于當接收指定語言的代碼對java對象的調(diào)用指令時,通過java本地接口jni獲取所述java對象;
所述存儲單元,用于將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù)。
本申請實施例采用的上述至少一個技術方案能夠達到以下有益效果:
由于在觸發(fā)指定語言的代碼對java對象的調(diào)用指令后,通過該調(diào)用指令查詢第一數(shù)據(jù)表,根據(jù)所述第一數(shù)據(jù)表中對所述java對象的引用地址信息的保存情況來調(diào)用該java對象。并且所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù)。從而解決了現(xiàn)有技術中,由于第二數(shù)據(jù)表中能夠保存的java對象的引用地址信息較少,在需要調(diào)用的java對象較多的情況下,可能會導致對這些java對象調(diào)用出錯的問題。。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
圖1為本申請實施例1提供的一種調(diào)用java對象的方法的具體實現(xiàn)流程示意圖;
圖2為本申請實施例1提供的一種調(diào)用java對象的方法在具體應用場景下的具體實現(xiàn)流程示意圖;
圖3為本申請實施例2提供的一種java對象的引用地址的存儲方法的具體實現(xiàn)流程示意圖;
圖4為本申請實施例3提供的一種調(diào)用java對象的裝置的具體結構示意圖;
圖5為本申請實施例4提供的一種java對象的引用地址的存儲裝置的具體結構示意圖。
具體實施方式
為使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結合附圖,詳細說明本申請各實施例提供的技術方案。
實施例1
如前所述,在實際應用中,由于經(jīng)常會出現(xiàn)同一個應用的某些模塊的代碼通過java語言編寫,而其它模塊的代碼通過其它語言(例如c語言、c++等)編寫,或者應用和系統(tǒng)的代碼分別由java語言和其它語言編寫,因此在java 語言和其它語言之間通常需要能夠互相調(diào)用。在其它語言調(diào)用java語言時,由于java語言自身面向對象的特點,因此如何調(diào)用java對象成為了一個重要的因素。通常情況下,可以通過java本地接口jni來實現(xiàn)其它語言對java對象的調(diào)用。
另外,通常還會出現(xiàn)其它語言的一段代碼在運行時,需要重復調(diào)用同一個java對象的情況。特別是,在代碼的較長的時,這種情況更加普遍出現(xiàn)?,F(xiàn)有技術中,為了便于對該java對象的調(diào)用,通常的做法是將該java對象的引用地址,在java本地接口jni通過該語言建立的數(shù)據(jù)表中進行保存。該語言的代碼當需要調(diào)用該java對象時,通過查詢該數(shù)據(jù)表來獲取該java對象的引用地址,從而通過該java對象的引用地址實現(xiàn)對該java對象的調(diào)用。
但是在實際應用中,通常會受到語法規(guī)則的限定,java本地接口jni對應的,該語言的數(shù)據(jù)表通常只能保存較少量的java對象的引用地址。如果將java對象的引用地址保存在該數(shù)據(jù)表中,當遇到需要調(diào)用的java對象的數(shù)量較多的情況時,通常會出現(xiàn)無法調(diào)用的情況,嚴重時甚至會導致該語言的代碼難以運行。
下面將以c語言的代碼調(diào)用java代碼中的java對象為例。在實際應用中,根據(jù)語法規(guī)則,java本地接口jni通過c語言建立的數(shù)據(jù)表,通常只能保存512個java對象的引用地址。在c語言的代碼較長的情況下,通常會出現(xiàn)需要調(diào)用的java對象的數(shù)量大于512的現(xiàn)象。這時候,如果將這些java對象的引用地址保存在該數(shù)據(jù)表中,將會出現(xiàn)某些java對象難以調(diào)用的情況,在嚴重時可能會導致該c語言的代碼難以運行。
有鑒于此缺陷,本申請?zhí)峁┝艘环N調(diào)用java對象的方法,用于解決上述中,其它語言的代碼通過保存在該語言的數(shù)據(jù)表中的java對象的引用地址,調(diào)用java對象時,由于該數(shù)據(jù)表能夠保存的java對象的引用地址的數(shù)量較少,而導致難以調(diào)用的問題。該方法的流程示意圖如圖1所示,包括下述步驟:
步驟s11:觸發(fā)指定語言的代碼對java對象的調(diào)用指令。
在這里,指定語言的代碼是指通過指定語言編寫的代碼,該指定語言可以是c語言、c++語言,也可以是能夠通過java本地接口jni調(diào)用java對象的其它語言。
當指定語言的代碼中包含有調(diào)用java代碼中的java對象的指令時,在該指定語言的代碼的運行過程中,通常會觸發(fā)該指令,用以進行該java對象的調(diào)用。
步驟s12:通過所述調(diào)用指令查詢第一數(shù)據(jù)表,確定所述第一數(shù)據(jù)表中是否保存有所述java對象的引用地址信息,當存在時,執(zhí)行步驟s13,當不存在時,執(zhí)行步驟s14。
在這里,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù)。
在實際應用中,由于該指定語言的代碼調(diào)用的是java代碼中的java對象。因此為了便于該java對象的調(diào)用,通??梢詫⒃摰谝粩?shù)據(jù)表通過java本地接口jni調(diào)取java語言來建立。也就是說,所述第一數(shù)據(jù)表通常可以是java本地接口jni通過java語言所建立的數(shù)據(jù)表。根據(jù)語法規(guī)則,通過這種方式建立的第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),通常會大于java本地接口jni通過該指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù)。
以c語言的代碼調(diào)用java代碼中的java對象為例,根據(jù)語法規(guī)則,java本地接口jni通過c語言建立的第二數(shù)據(jù)表通常只能夠保存512條java對象的引用地址信息,但是java本地接口jni通過java語言建立的第一數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù)通常會大于512。
通過所述調(diào)用指令查詢第一數(shù)據(jù)表,確定所述第一數(shù)據(jù)表中是否保存有所述java對象的引用地址信息。在實際應用中,當java對象的調(diào)用指令被觸發(fā)后,可以通過該指令查詢第一數(shù)據(jù)表,根據(jù)查詢結果確定該第一數(shù)據(jù)表中是否 保存有該java對象的引用地址信息。
另外需要說明的是,在實際應用中,通常還可以通過一個模塊來管理對java對象的調(diào)用,特別是通過java本地接口jni對java對象的調(diào)用,可以稱該模塊為jni引用管理模塊(javanativeinterfacereferencemanager)。該模塊通??梢杂糜诠芾碇付ㄕZ言對java語言中java對象的調(diào)用,特別是指定語言通過java本地接口jni對java對象的調(diào)用。另外,在實際開發(fā)該模塊的過程中,由于語言規(guī)則的不同,該jni引用管理模塊通常和該指定語言具有對應關系。例如,當該指定語言為c語言時,該jni引用管理模塊對應的用于管理c語言的代碼通過java本地接口jni對java對象的調(diào)用;當該指定語言為c++語言時,該jni引用管理模塊用于管理c++語言的代碼通過java本地接口jni對java對象的調(diào)用;當該指定語言為其它的語言時,該jni引用管理模塊用于管理對應語言的代碼通過java本地接口jni對java對象的調(diào)用。當然,在這里并不會對jni引用管理組件的形式進行限定,只需要說明該jni引用管理組件用于管理指定語言的代碼通過java本地接口jni對java對象的調(diào)用,就不會影響本發(fā)明的技術效果。
特別的,在這里的java對象的引用地址信息是指java對象的引用地址的信息,該信息用于確定該java的引用地址,所述java對象的引用地址用于通過該引用地址調(diào)用該java對象。在實際應用中,java對象的引用地址信息通??梢灾苯邮莏ava對象的引用地址,也可以是與所述java對象的引用地址相關聯(lián)的其它信息,通過該其它信息可以確定該java對象的引用地址,該其它信息的形式可以是唯一標識符。也就是說,所述java對象的引用地址信息具體包括與所述java對象的引用地址相關聯(lián)的唯一標識符。
步驟s13:當存在時,通過所述java對象的引用地址信息調(diào)用所述java對象。
當?shù)谝粩?shù)據(jù)表中保存有該java對象的引用地址信息時,可以通過該java對象的引用地址信息來調(diào)用該java對象。
在實際應用中,由于java對象的引用地址信息形式的不同,通常調(diào)用該java對象的方式也不同。例如,當該java對象的引用地址信息就為java對象的引用地址時,可以直接通過該java對象的引用地址信息調(diào)用該java對象;當所述java對象的引用地址的信息具體為與所述java對象的引用地址相關聯(lián)的唯一標識符時,所述通過所述java對象的引用地址信息調(diào)用所述java對象具體包括:通過與所述java對象的引用地址相關聯(lián)的唯一標識符調(diào)用jni引用管理組件來獲取所述java對象的引用地址,并根據(jù)所獲取的java對象的引用地址調(diào)用所述java對象,所述jni引用管理組件用于管理所述指定語言的代碼通過java本地接口jni對java對象的調(diào)用。
步驟s14:當不存在時,通過java本地接口jni調(diào)用所述java對象。
當?shù)谝粩?shù)據(jù)表中沒有保存該java對象的引用地址信息時,可以通過java本地接口jni調(diào)用所述java代碼中的所述java對象。
在實際應用中,通常還會遇到的場景是,指定語言的代碼在運行時需要多次調(diào)用同一個java對象。所以為了便于對該java對象的多次調(diào)用,通常在通過java本地接口jni調(diào)用所述java對象之后,還可以將所述java對象的引用地址信息進行保存。這樣使得,在下次調(diào)用該java對象時,可以通過查詢第一數(shù)據(jù)表來獲取該java對象的引用地址信息,從而使得調(diào)用該java對象更加方便。因此,實際應用中的一種優(yōu)選方案是,在通過java本地接口jni調(diào)用所述java對象之后,將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表。
實際應用中,當java對象的引用地址信息具體為與所述java對象的引用地址相關聯(lián)的唯一標識符時,將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表的方式可以具體包括步驟s141。
步驟s141:生成與所述java對象的引用地址相關聯(lián)的唯一標識符,并將所述唯一標識符存儲在第一數(shù)據(jù)表。
在這里,所生成的唯一標識符的形式也可以有多種,例如可以采用整數(shù)形式的阿拉伯數(shù)字作為唯一標識符,也可以采用英文字母作為唯一標識符,也可 以采用阿拉伯數(shù)字加英文字母作為唯一標識符,當然也可以采用其它形式的唯一標識符。另外,生成唯一標識符的方法有很多,例如可以隨機生成唯一標識符,也可以通過數(shù)值遞加的方式生成唯一標識符,也可以通過其它方法生成唯一標識符,在實際應用中通??梢酝ㄟ^數(shù)值遞加的方式生成唯一標識符。這里并不對生成唯一標識符的方法,以及唯一標識符的形式做出限定。另外,將所述唯一標識符存儲在第一數(shù)據(jù)表可以通過調(diào)用jni引用管理組件將所述唯一標識符存儲在第一數(shù)據(jù)表。
當?shù)谝淮握{(diào)用java對象時,通常第一數(shù)據(jù)表中并沒有保存有該java對象的引用地址信息,這時候可以通過java本地接口jni調(diào)用該java對象,然后生成與該java對象的引用地址信息相關聯(lián)的唯一標識符,并通過調(diào)用jni引用管理組件將所述唯一標識符存儲在第一數(shù)據(jù)表中。這樣可以使得,在之后調(diào)用該java對象時,通過查詢第一數(shù)據(jù)庫,可以獲取該java對象的引用地址信息,并根據(jù)該java對象的引用地址信息來調(diào)用該java對象,從而可以更加方便該java對象的調(diào)用。
需要進一步說明的是,實際情況下,在步驟s13中,通過該java對象的引用地址信息調(diào)用java對象時,通常也需要經(jīng)過java本地接口jni來進行調(diào)用。而根據(jù)java本地接口jni調(diào)用java對象的規(guī)則,在調(diào)用該java對象的過程中,會將該java對象的引用地址信息,在java本地接口jni通過該指定語言建立的第二數(shù)據(jù)表中進行保存,這一點和步驟s14中通過java本地接口jni調(diào)用所述java對象相同。因此,在通過java本地接口jni將該java對象調(diào)用之后,通常還可以包括步驟s15。
步驟s15:在java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表中,刪除所述java對象的引用地址信息。
當通過java本地接口jni調(diào)用java對象時,在java對象的調(diào)用過程完成之后,還可以將第二數(shù)據(jù)庫中該java對象的引用地址進行刪除,這樣只需要將該java對象的引用地址在第一數(shù)據(jù)庫中進行保存,在實際應用中可以節(jié)省存儲 資源。
采用本申請實施例1中的調(diào)用java對象的方法,在觸發(fā)指定語言的代碼對java對象的調(diào)用指令后,通過該調(diào)用指令查詢第一數(shù)據(jù)表,根據(jù)所述第一數(shù)據(jù)表中對所述java對象的引用地址信息的保存情況來調(diào)用該java對象,由于所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù)。從而解決了現(xiàn)有技術中,由于第二數(shù)據(jù)表中能夠保存的java對象的引用地址信息較少,在需要調(diào)用的java對象較多的情況下,可能導致對這些java對象調(diào)用出錯的問題。
需要說明的是,實施例1所提供方法的各步驟的執(zhí)行主體均可以是同一設備,或者,該方法的各步驟也可以由不同設備作為執(zhí)行主體。比如,步驟s11和步驟s12的執(zhí)行主體可以為設備1;又比如,步驟s11的執(zhí)行主體可以為設備1,步驟s12和的執(zhí)行主體可以為設備2;等等。
以上是對本申請實施例提供的調(diào)用java對象的方法的說明。為了便于理解,本申請實施例還提供了實際應用中,實施該方法的具體應用場景。該應用場景為c語言的代碼調(diào)用java代碼中的java對象。在該應用場景下,指定語言為c語言,指定語言的代碼為c語言的代碼。如表2所示,該應用場景下所示方法具體可以包括以下步驟:
步驟s21:觸發(fā)c語言的代碼對java代碼中的java對象的調(diào)用指令;
步驟s22:通過該調(diào)用指令查詢第一數(shù)據(jù)表;
所述第一數(shù)據(jù)表具體為java本地接口jni通過java語言建立的數(shù)據(jù)表。
步驟s23:根據(jù)查詢結果確定所述第一數(shù)據(jù)表中是否保存有與所述java對象的引用地址相關聯(lián)的唯一標識符,若是,則執(zhí)行步驟s24至步驟s26,若否,則執(zhí)行步驟s27至步驟s29;
步驟s24:獲取所述唯一標識符;
步驟s25:通過唯一標識符調(diào)用jni引用管理組件來獲取所述java對象的 引用地址;
在這里,jni引用管理組件用于管理c語言的代碼通過java本地接口jni對java對象的調(diào)用。
步驟s26:根據(jù)所獲取的java對象的引用地址調(diào)用所述java對象;
步驟s27:通過java本地接口jni調(diào)用所述java對象;
步驟s28:生成與所述java對象的引用地址相關聯(lián)的唯一標識符;
步驟s29:通過jni引用管理組件將生成的唯一標識符存儲在第一數(shù)據(jù)表;
步驟s210:在java本地接口jni通過c語言建立的第二數(shù)據(jù)表中,刪除所述java對象的引用地址信息。
另外,需要說明的是,由于c++語言和c語言有相似的語法規(guī)則,因此本申請實施例在c++語言的代碼調(diào)用java代碼中的java對象過程中,與該應用場景相似的過程相似,在這里就不在另作說明。
實施例2
本申請的實施例2提供了一種java對象的引用地址的存儲方法,用于解決現(xiàn)有技術中,通過java本地接口jni調(diào)用java對象時,由于能夠調(diào)用的java對象數(shù)量較少導致可能無法運行的問題。該方法的流程圖如圖3所示,該方法的步驟包括:
步驟s31:當接收指定語言的代碼對java對象的調(diào)用指令時,通過java本地接口jni獲取所述java對象。
在這里,指定語言的代碼是指指定語言編寫的代碼,該指定語言通??梢允筩語言,也可以是c++語言,也可以是能夠通過java本地接口jni調(diào)用java對象的其它語言。
在實際應用中,java本地接口jni能夠提供多個應用程序編程接口(applicationprogramminginterface,api),使得其它語言能夠通過這些api獲取所述java對象。
步驟s32:將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表。
在這里,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù)。
在實際應用中,該第一數(shù)據(jù)表的形式可以有多種,生成該第一數(shù)據(jù)表的方式也可以有多種。但是,該第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù)。其中,一種生成第一數(shù)據(jù)表的優(yōu)選方案是,java本地接口jni通過java語言建立該第一數(shù)據(jù)表。這樣可以使得在查詢該數(shù)據(jù)表示,更加容易實現(xiàn)。
在實際應用中,將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表的方式可以有多種。一種優(yōu)選的方案是,通過調(diào)用jni引用管理組件將該java對象的引用地址信息存儲在第一數(shù)據(jù)表。其中,該jni引用管理組件用于管理所述指定語言的代碼通過java本地接口jni調(diào)用java對象。
采用本申請實施例2所提供的方法,在通過java本地接口jni獲取java對象之后,將該java對象的引用地址信息保存在第一數(shù)據(jù)表中,由于第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù),因此解決了現(xiàn)有技術的問題。
實施例3
采用與實施例1相同的發(fā)明構思,本申請的實施例3提供了一種調(diào)用java對象的裝置,該裝置40包括:觸發(fā)單元401、判斷單元402、第一調(diào)用單元403和第二調(diào)用單元404,其中:
所述觸發(fā)單元401,用于觸發(fā)指定語言的代碼對java對象的調(diào)用指令;
所述判斷單元402,用于通過所述調(diào)用指令查詢第一數(shù)據(jù)表,確定所述第 一數(shù)據(jù)表中是否保存有所述java對象的引用地址信息,若是,則觸發(fā)第一調(diào)用單元403,若否,則觸發(fā)第二調(diào)用單元404,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù);
所述第一調(diào)用單元403,用于通過所述java對象的引用地址信息調(diào)用所述java對象;
所述第二調(diào)用單元404,用于通過java本地接口jni調(diào)用所述java對象。
本申請的實施例3由于采用和實施例1相同的發(fā)明構思,因此可以取得和實施例1相同的發(fā)明效果。另外,在實際應用中,實施例3提供的裝置40還能夠通過和硬件裝置結合,取得其它的實施效果。例如,在指定語言的代碼需要調(diào)用的java對象較多時,在調(diào)用這些java對象的過程中,查詢第一數(shù)據(jù)表的頻率通常較高,這時候可以將該第一數(shù)據(jù)表保存在緩存中,這樣可以加快調(diào)用的速度。當然,這只是該裝置40結合硬件裝置取得的技術效果之一,在具體實施過程中還可能會取得其它的技術效果,這里就不再一一列舉。
在這里,java對象的引用地址信息是指java對象的引用地址的信息,該信息用于確定該java的引用地址,所述java對象的引用地址用于通過該引用地址調(diào)用該java對象。通常,java對象的引用地址信息可以直接是java對象的引用地址,也可以是與所述java對象的引用地址相關聯(lián)的其它信息,通過該其它信息可以確定該java對象的引用地址,該其它信息的形式可以是唯一標識符。在實際應用中,一種優(yōu)選的方案是,所述java對象的引用地址信息為與所述java對象的引用地址相關聯(lián)的唯一標識符;則,所述第一調(diào)用單元403具體包括第一調(diào)用子單元4031,用于通過與所述java對象的引用地址相關聯(lián)的唯一標識符調(diào)用jni引用管理組件來獲取所述java對象的引用地址,并根據(jù)所獲取的java對象的引用地址調(diào)用所述java對象,所述jni引用管理組件用于管理所述指定語言的代碼通過java本地接口jni對java對象的調(diào)用。
實施例4
采用與實施例2相同的發(fā)明構思,本申請還提供一種java對象的引用地址信息的存儲裝置,該裝置50包括:獲取單元501和存儲單元502,其中:
所述獲取單元501,用于當接收指定語言的代碼對java對象的調(diào)用指令時,通過java本地接口jni獲取所述java對象;
所述存儲單元502,用于將所述java對象的引用地址信息存儲在第一數(shù)據(jù)表,所述第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù)。
采用本申請實施例4所提供的該裝置50,通過獲取單元501獲取java對象之后,將該java對象的引用地址信息通過存儲單元502保存在第一數(shù)據(jù)表中,由于第一數(shù)據(jù)表能夠保存的java對象的引用地址信息的條數(shù),大于java本地接口jni通過所述指定語言建立的第二數(shù)據(jù)表,能夠保存的java對象的引用地址信息的條數(shù),因此解決了現(xiàn)有技術的問題。
本領域內(nèi)的技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一 個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包 括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求范圍之內(nèi)。