[發(fā)明專利]一種基于Lua獲取手機(jī)應(yīng)用內(nèi)存的方法及裝置有效
| 申請(qǐng)?zhí)枺?/td> | 201910033318.2 | 申請(qǐng)日: | 2019-01-14 |
| 公開(公告)號(hào): | CN109871276B | 公開(公告)日: | 2021-02-02 |
| 發(fā)明(設(shè)計(jì))人: | 劉馬良;馬力;劉鼎三;黎健鈞 | 申請(qǐng)(專利權(quán))人: | 珠海金山網(wǎng)絡(luò)游戲科技有限公司;珠海西山居移動(dòng)游戲科技有限公司 |
| 主分類號(hào): | G06F9/50 | 分類號(hào): | G06F9/50;H04M1/725 |
| 代理公司: | 廣州嘉權(quán)專利商標(biāo)事務(wù)所有限公司 44205 | 代理人: | 陳慧華 |
| 地址: | 519000 廣東省珠海市高新*** | 國(guó)省代碼: | 廣東;44 |
| 權(quán)利要求書: | 查看更多 | 說(shuō)明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 lua 獲取 手機(jī) 應(yīng)用 內(nèi)存 方法 裝置 | ||
一種基于Lua獲取手機(jī)應(yīng)用內(nèi)存的方法,適用于Unity引擎開發(fā)的應(yīng)用程序,包括:初始化Lua虛擬機(jī)以傳入自定義的內(nèi)存分配器到內(nèi)存分配函數(shù);在Lua調(diào)用內(nèi)存分配函數(shù)以分配內(nèi)存塊時(shí),由所述內(nèi)存分配器遍歷當(dāng)前C#調(diào)用棧和Lua調(diào)用棧以抓取內(nèi)存信息;按照調(diào)用路徑記錄內(nèi)存信息到調(diào)用路徑表中,并在釋放內(nèi)存塊時(shí)移除保存有對(duì)應(yīng)調(diào)用路徑的指針;導(dǎo)出調(diào)用路徑表,并按照未釋放內(nèi)存塊的總大小排序各個(gè)調(diào)用路徑。本申請(qǐng)還相應(yīng)公開了一種基于Lua獲取手機(jī)應(yīng)用內(nèi)存的裝置。本申請(qǐng)的有意效果是:通過(guò)混合輸出C#調(diào)用棧和Lua調(diào)用棧,從而能夠獲取到占用內(nèi)存較多的C#與Lua代碼調(diào)用路徑,方便開發(fā)人員對(duì)其進(jìn)行優(yōu)化。
技術(shù)領(lǐng)域
本發(fā)明涉及移動(dòng)設(shè)備領(lǐng)域,尤其涉及一種基于Lua獲取手機(jī)應(yīng)用內(nèi)存的方法及裝置。
背景技術(shù)
在智能手機(jī)行業(yè),手機(jī)游戲作為手機(jī)應(yīng)用中的一個(gè)重要的大類,其市場(chǎng)占有率越來(lái)越高。大部分的知名游戲開發(fā)公司都在手機(jī)游戲開發(fā)投入了較多的技術(shù)研發(fā)。在手機(jī)游戲的開發(fā)過(guò)程中,降低手機(jī)游戲的內(nèi)存占用率一直都是手機(jī)應(yīng)用開發(fā)人員較為關(guān)心的點(diǎn)之一。若游戲運(yùn)行過(guò)程中占用內(nèi)存過(guò)多,可能會(huì)被操作系統(tǒng)認(rèn)定為異常進(jìn)程而直接關(guān)閉,也可能會(huì)因占用過(guò)多導(dǎo)致系統(tǒng)內(nèi)存,使得系統(tǒng)性能降低,從而令游戲體驗(yàn)下降。
Unity作為一種廣泛應(yīng)用的手機(jī)游戲開發(fā)引擎,采用Mono平臺(tái)作為其C#虛擬機(jī),并且支持Lua語(yǔ)言開發(fā)。具體地,目前基于Unity引擎開發(fā)的游戲一般通過(guò)slua以支持Lua語(yǔ)言進(jìn)行游戲邏輯開發(fā)。對(duì)于游戲中Lua部分代碼的內(nèi)存分配和回收,主流的實(shí)現(xiàn)方案采用替換內(nèi)存分配器,以方便統(tǒng)計(jì)以分配給Lua的內(nèi)存和及時(shí)地釋放相關(guān)內(nèi)存。同時(shí),上述實(shí)施方案也可以通過(guò)導(dǎo)出Lua調(diào)用棧來(lái)獲得內(nèi)存熱點(diǎn),為開發(fā)人員對(duì)手機(jī)游戲的進(jìn)一步優(yōu)化提供參考(例如確定手機(jī)游戲的性能瓶頸,改善卡頓或內(nèi)存不足而引起的閃退問(wèn)題)。然而,由于在Unity引擎所開發(fā)的手機(jī)游戲中,Lua代碼部分與C#代碼部分一般都會(huì)根據(jù)具體的應(yīng)用場(chǎng)合而相互調(diào)用,因此如果僅輸出Lua調(diào)用棧,那么開發(fā)人員很多時(shí)候無(wú)法獲取到全面的內(nèi)存調(diào)用信息。
發(fā)明內(nèi)容
本申請(qǐng)的目的是解決現(xiàn)有技術(shù)的不足,提供一種基于Lua獲取手機(jī)應(yīng)用內(nèi)存的方法及裝置,通過(guò)混合輸出C#調(diào)用棧和Lua調(diào)用棧,從而能夠獲得更為詳細(xì)的Lua內(nèi)存熱點(diǎn)信息的效果。
為了實(shí)現(xiàn)上述目的,本申請(qǐng)采用以下的技術(shù)方案。
首先,本申請(qǐng)?zhí)岢鲆环N基于Lua獲取手機(jī)應(yīng)用內(nèi)存的方法,適用于Unity引擎開發(fā)的應(yīng)用程序。該方法包括以下步驟:
S100)初始化Lua虛擬機(jī)以傳入自定義的內(nèi)存分配器到內(nèi)存分配函數(shù);
S200)在Lua調(diào)用內(nèi)存分配函數(shù)以分配內(nèi)存塊時(shí),由所述內(nèi)存分配器遍歷當(dāng)前C#調(diào)用棧和Lua調(diào)用棧以抓取內(nèi)存信息;
S300)按照調(diào)用路徑記錄內(nèi)存信息到調(diào)用路徑表中,并在釋放內(nèi)存塊時(shí)移除保存有對(duì)應(yīng)調(diào)用路徑的指針;
S400)導(dǎo)出調(diào)用路徑表,并按照未釋放內(nèi)存塊的總大小排序各個(gè)調(diào)用路徑。
進(jìn)一步地,在本申請(qǐng)的上述方法中,所述內(nèi)存信息至少包括內(nèi)存分配大小、對(duì)象類型和內(nèi)存塊地址。
可替代地,在本申請(qǐng)的上述方法中,所述內(nèi)存分配函數(shù)采用鉤子函數(shù)的形式實(shí)現(xiàn)。
進(jìn)一步地,在本申請(qǐng)的上述方法中,所述步驟S200還包括以下的子步驟:
S201)通過(guò)鉤子函數(shù)形式的內(nèi)存分配器捕獲Lua分配內(nèi)存的消息;
S202)遍歷當(dāng)前C#調(diào)用棧和Lua調(diào)用棧以抓取內(nèi)存信息;
S203)散列所抓取的內(nèi)存信息,并形成散列后內(nèi)存信息的索引號(hào)。
進(jìn)一步地,在本申請(qǐng)的上述方法中,所述步驟S300還包括以下的子步驟:
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于珠海金山網(wǎng)絡(luò)游戲科技有限公司;珠海西山居移動(dòng)游戲科技有限公司,未經(jīng)珠海金山網(wǎng)絡(luò)游戲科技有限公司;珠海西山居移動(dòng)游戲科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910033318.2/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。





