女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Java層面的工具定位內(nèi)存區(qū)域

倩倩 ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-09-20 10:57 ? 次閱讀


為了更好地實(shí)現(xiàn)對(duì)項(xiàng)目的管理,我們將組內(nèi)一個(gè)項(xiàng)目遷移到MDP框架(基于Spring Boot),隨后我們就發(fā)現(xiàn)系統(tǒng)會(huì)頻繁報(bào)出Swap區(qū)域使用量過高的異常。筆者被叫去幫忙查看原因,發(fā)現(xiàn)配置了4G堆內(nèi)內(nèi)存,但是實(shí)際使用的物理內(nèi)存竟然高達(dá)7G,確實(shí)不正常。JVM參數(shù)配置是“-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize=128m -XX:InitialCodeCacheSize=128m, -Xss512k -Xmx4g -Xms4g,-XX:+UseG1GC -XX:G1HeapRegionSize=4M”,實(shí)際使用的物理內(nèi)存如下圖所示:

d7002dc8-388d-11ed-ba43-dac502259ad0.jpgtop命令顯示的內(nèi)存情況

排查過程

1. 使用Java層面的工具定位內(nèi)存區(qū)域(堆內(nèi)內(nèi)存、Code區(qū)域或者使用unsafe.allocateMemory和DirectByteBuffer申請(qǐng)的堆外內(nèi)存)

筆者在項(xiàng)目中添加-XX:NativeMemoryTracking=detailJVM參數(shù)重啟項(xiàng)目,使用命令jcmd pid VM.native_memory detail查看到的內(nèi)存分布如下:

d734cfd8-388d-11ed-ba43-dac502259ad0.jpgjcmd顯示的內(nèi)存情況

發(fā)現(xiàn)命令顯示的committed的內(nèi)存小于物理內(nèi)存,因?yàn)閖cmd命令顯示的內(nèi)存包含堆內(nèi)內(nèi)存、Code區(qū)域、通過unsafe.allocateMemory和DirectByteBuffer申請(qǐng)的內(nèi)存,但是不包含其他Native Code(C代碼)申請(qǐng)的堆外內(nèi)存。所以猜測(cè)是使用Native Code申請(qǐng)內(nèi)存所導(dǎo)致的問題。

為了防止誤判,筆者使用了pmap查看內(nèi)存分布,發(fā)現(xiàn)大量的64M的地址;而這些地址空間不在jcmd命令所給出的地址空間里面,基本上就斷定就是這些64M的內(nèi)存所導(dǎo)致。

d79e3856-388d-11ed-ba43-dac502259ad0.jpg

pmap顯示的內(nèi)存情況

2、使用系統(tǒng)層面的工具定位堆外內(nèi)存

因?yàn)楣P者已經(jīng)基本上確定是Native Code所引起,而Java層面的工具不便于排查此類問題,只能使用系統(tǒng)層面的工具去定位問題。

首先,使用了gperftools去定位問題

gperftools的使用方法可以參考gperftools,gperftools的監(jiān)控如下:

d7cb1f56-388d-11ed-ba43-dac502259ad0.jpggperftools監(jiān)控

從上圖可以看出:使用malloc申請(qǐng)的的內(nèi)存最高到3G之后就釋放了,之后始終維持在700M-800M。筆者第一反應(yīng)是:難道Native Code中沒有使用malloc申請(qǐng),直接使用mmap/brk申請(qǐng)的?(gperftools原理就使用動(dòng)態(tài)鏈接的方式替換了操作系統(tǒng)默認(rèn)的內(nèi)存分配器(glibc)。)

然后,使用strace去追蹤系統(tǒng)調(diào)用

因?yàn)槭褂胓perftools沒有追蹤到這些內(nèi)存,于是直接使用命令“strace -f -e”brk,mmap,munmap” -p pid”追蹤向OS申請(qǐng)內(nèi)存請(qǐng)求,但是并沒有發(fā)現(xiàn)有可疑內(nèi)存申請(qǐng)。strace監(jiān)控如下圖所示:

d7fb8a92-388d-11ed-ba43-dac502259ad0.jpg

strace監(jiān)控

接著,使用GDB去dump可疑內(nèi)存

因?yàn)槭褂胹trace沒有追蹤到可疑內(nèi)存申請(qǐng);于是想著看看內(nèi)存中的情況。就是直接使用命令gdp -pid pid進(jìn)入GDB之后,然后使用命令dump memory mem.bin startAddress endAddressdump內(nèi)存,其中startAddress和endAddress可以從/proc/pid/smaps中查找。然后使用strings mem.bin查看dump的內(nèi)容,如下:

d814676a-388d-11ed-ba43-dac502259ad0.jpg

gperftools監(jiān)控

從內(nèi)容上來看,像是解壓后的JAR包信息。讀取JAR包信息應(yīng)該是在項(xiàng)目啟動(dòng)的時(shí)候,那么在項(xiàng)目啟動(dòng)之后使用strace作用就不是很大了。所以應(yīng)該在項(xiàng)目啟動(dòng)的時(shí)候使用strace,而不是啟動(dòng)完成之后。

再次,項(xiàng)目啟動(dòng)時(shí)使用strace去追蹤系統(tǒng)調(diào)用

項(xiàng)目啟動(dòng)使用strace追蹤系統(tǒng)調(diào)用,發(fā)現(xiàn)確實(shí)申請(qǐng)了很多64M的內(nèi)存空間,截圖如下:

d8368c00-388d-11ed-ba43-dac502259ad0.jpgstrace監(jiān)控

使用該mmap申請(qǐng)的地址空間在pmap對(duì)應(yīng)如下:

d85ca2b4-388d-11ed-ba43-dac502259ad0.jpgstrace申請(qǐng)內(nèi)容對(duì)應(yīng)的pmap地址空間

最后,使用jstack去查看對(duì)應(yīng)的線程

因?yàn)閟trace命令中已經(jīng)顯示申請(qǐng)內(nèi)存的線程ID。直接使用命令jstack pid去查看線程棧,找到對(duì)應(yīng)的線程棧(注意10進(jìn)制和16進(jìn)制轉(zhuǎn)換)如下:

d8b179ba-388d-11ed-ba43-dac502259ad0.jpgstrace申請(qǐng)空間的線程棧

這里基本上就可以看出問題來了:MCC(美團(tuán)統(tǒng)一配置中心)使用了Reflections進(jìn)行掃包,底層使用了Spring Boot去加載JAR。因?yàn)榻鈮篔AR使用Inflater類,需要用到堆外內(nèi)存,然后使用Btrace去追蹤這個(gè)類,棧如下:

d8d5867a-388d-11ed-ba43-dac502259ad0.jpg

btrace追蹤棧

然后查看使用MCC的地方,發(fā)現(xiàn)沒有配置掃包路徑,默認(rèn)是掃描所有的包。于是修改代碼,配置掃包路徑,發(fā)布上線后內(nèi)存問題解決。

3、為什么堆外內(nèi)存沒有釋放掉呢?

雖然問題已經(jīng)解決了,但是有幾個(gè)疑問:

  • 為什么使用舊的框架沒有問題?
  • 為什么堆外內(nèi)存沒有釋放?
  • 為什么內(nèi)存大小都是64M,JAR大小不可能這么大,而且都是一樣大?
  • 為什么gperftools最終顯示使用的的內(nèi)存大小是700M左右,解壓包真的沒有使用malloc申請(qǐng)內(nèi)存嗎?

帶著疑問,筆者直接看了一下Spring Boot Loader那一塊的源碼。發(fā)現(xiàn)Spring Boot對(duì)Java JDK的InflaterInputStream進(jìn)行了包裝并且使用了Inflater,而Inflater本身用于解壓JAR包的需要用到堆外內(nèi)存。而包裝之后的類ZipInflaterInputStream沒有釋放Inflater持有的堆外內(nèi)存。于是筆者以為找到了原因,立馬向Spring Boot社區(qū)反饋了這個(gè)bug。但是反饋之后,筆者就發(fā)現(xiàn)Inflater這個(gè)對(duì)象本身實(shí)現(xiàn)了finalize方法,在這個(gè)方法中有調(diào)用釋放堆外內(nèi)存的邏輯。也就是說Spring Boot依賴于GC釋放堆外內(nèi)存。

筆者使用jmap查看堆內(nèi)對(duì)象時(shí),發(fā)現(xiàn)已經(jīng)基本上沒有Inflater這個(gè)對(duì)象了。于是就懷疑GC的時(shí)候,沒有調(diào)用finalize。帶著這樣的懷疑,筆者把Inflater進(jìn)行包裝在Spring Boot Loader里面替換成自己包裝的Inflater,在finalize進(jìn)行打點(diǎn)監(jiān)控,結(jié)果finalize方法確實(shí)被調(diào)用了。于是筆者又去看了Inflater對(duì)應(yīng)的C代碼,發(fā)現(xiàn)初始化的使用了malloc申請(qǐng)內(nèi)存,end的時(shí)候也調(diào)用了free去釋放內(nèi)存。

此刻,筆者只能懷疑free的時(shí)候沒有真正釋放內(nèi)存,便把Spring Boot包裝的InflaterInputStream替換成Java JDK自帶的,發(fā)現(xiàn)替換之后,內(nèi)存問題也得以解決了。

這時(shí),再返過來看gperftools的內(nèi)存分布情況,發(fā)現(xiàn)使用Spring Boot時(shí),內(nèi)存使用一直在增加,突然某個(gè)點(diǎn)內(nèi)存使用下降了好多(使用量直接由3G降為700M左右)。這個(gè)點(diǎn)應(yīng)該就是GC引起的,內(nèi)存應(yīng)該釋放了,但是在操作系統(tǒng)層面并沒有看到內(nèi)存變化,那是不是沒有釋放到操作系統(tǒng),被內(nèi)存分配器持有了呢?

繼續(xù)探究,發(fā)現(xiàn)系統(tǒng)默認(rèn)的內(nèi)存分配器(glibc 2.12版本)和使用gperftools內(nèi)存地址分布差別很明顯,2.5G地址使用smaps發(fā)現(xiàn)它是屬于Native Stack。內(nèi)存地址分布如下:

d94771f4-388d-11ed-ba43-dac502259ad0.jpggperftools顯示的內(nèi)存地址分布

到此,基本上可以確定是內(nèi)存分配器在搗鬼;搜索了一下glibc 64M,發(fā)現(xiàn)glibc從2.11開始對(duì)每個(gè)線程引入內(nèi)存池(64位機(jī)器大小就是64M內(nèi)存),原文如下:

daa424d4-388d-11ed-ba43-dac502259ad0.jpgglib內(nèi)存池說明

按照文中所說去修改MALLOC_ARENA_MAX環(huán)境變量,發(fā)現(xiàn)沒什么效果。查看tcmalloc(gperftools使用的內(nèi)存分配器)也使用了內(nèi)存池方式。

為了驗(yàn)證是內(nèi)存池搞的鬼,筆者就簡(jiǎn)單寫個(gè)不帶內(nèi)存池的內(nèi)存分配器。使用命令gcc zjbmalloc.c -fPIC -shared -o zjbmalloc.so生成動(dòng)態(tài)庫,然后使用export LD_PRELOAD=zjbmalloc.so替換掉glibc的內(nèi)存分配器。其中代碼Demo如下:

#include
#include
#include
#include
//作者使用的64位機(jī)器,sizeof(size_t)也就是sizeof(long)
void*malloc(size_tsize)
{
long*ptr=mmap(0,size+sizeof(long),PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,0,0);
if(ptr==MAP_FAILED){
returnNULL;
}
*ptr=size;//First8bytescontainlength.
return(void*)(&ptr[1]);//Memorythatisafterlengthvariable
}

void*calloc(size_tn,size_tsize){
void*ptr=malloc(n*size);
if(ptr==NULL){
returnNULL;
}
memset(ptr,0,n*size);
returnptr;
}
void*realloc(void*ptr,size_tsize)
{
if(size==0){
free(ptr);
returnNULL;
}
if(ptr==NULL){
returnmalloc(size);
}
long*plen=(long*)ptr;
plen--;//Reachtopofmemory
longlen=*plen;
if(size<=?len)?{
returnptr;
}
void*rptr=malloc(size);
if(rptr==NULL){
free(ptr);
returnNULL;
}
rptr=memcpy(rptr,ptr,len);
free(ptr);
returnrptr;
}

voidfree(void*ptr)
{
if(ptr==NULL){
return;
}
long*plen=(long*)ptr;
plen--;//Reachtopofmemory
longlen=*plen;//Readlength
munmap((void*)plen,len+sizeof(long));
}

通過在自定義分配器當(dāng)中埋點(diǎn)可以發(fā)現(xiàn)其實(shí)程序啟動(dòng)之后應(yīng)用實(shí)際申請(qǐng)的堆外內(nèi)存始終在700M-800M之間,gperftools監(jiān)控顯示內(nèi)存使用量也是在700M-800M左右。但是從操作系統(tǒng)角度來看進(jìn)程占用的內(nèi)存差別很大(這里只是監(jiān)控堆外內(nèi)存)。

筆者做了一下測(cè)試,使用不同分配器進(jìn)行不同程度的掃包,占用的內(nèi)存如下:

dad088ee-388d-11ed-ba43-dac502259ad0.jpg內(nèi)存測(cè)試對(duì)比

為什么自定義的malloc申請(qǐng)800M,最終占用的物理內(nèi)存在1.7G呢?

因?yàn)樽远x內(nèi)存分配器采用的是mmap分配內(nèi)存,mmap分配內(nèi)存按需向上取整到整數(shù)個(gè)頁,所以存在著巨大的空間浪費(fèi)。通過監(jiān)控發(fā)現(xiàn)最終申請(qǐng)的頁面數(shù)目在536k個(gè)左右,那實(shí)際上向系統(tǒng)申請(qǐng)的內(nèi)存等于512k * 4k(pagesize) = 2G。為什么這個(gè)數(shù)據(jù)大于1.7G呢?

因?yàn)椴僮飨到y(tǒng)采取的是延遲分配的方式,通過mmap向系統(tǒng)申請(qǐng)內(nèi)存的時(shí)候,系統(tǒng)僅僅返回內(nèi)存地址并沒有分配真實(shí)的物理內(nèi)存。只有在真正使用的時(shí)候,系統(tǒng)產(chǎn)生一個(gè)缺頁中斷,然后再分配實(shí)際的物理Page。

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

總結(jié)

daec1d2a-388d-11ed-ba43-dac502259ad0.jpg流程圖

整個(gè)內(nèi)存分配的流程如上圖所示。MCC掃包的默認(rèn)配置是掃描所有的JAR包。在掃描包的時(shí)候,Spring Boot不會(huì)主動(dòng)去釋放堆外內(nèi)存,導(dǎo)致在掃描階段,堆外內(nèi)存占用量一直持續(xù)飆升。當(dāng)發(fā)生GC的時(shí)候,Spring Boot依賴于finalize機(jī)制去釋放了堆外內(nèi)存;但是glibc為了性能考慮,并沒有真正把內(nèi)存歸返到操作系統(tǒng),而是留下來放入內(nèi)存池了,導(dǎo)致應(yīng)用層以為發(fā)生了“內(nèi)存泄漏”。所以修改MCC的配置路徑為特定的JAR包,問題解決。筆者在發(fā)表這篇文章時(shí),發(fā)現(xiàn)Spring Boot的最新版本(2.0.5.RELEASE)已經(jīng)做了修改,在ZipInflaterInputStream主動(dòng)釋放了堆外內(nèi)存不再依賴GC;所以Spring Boot升級(jí)到最新版本,這個(gè)問題也可以得到解決。


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2984

    瀏覽量

    106926
  • 追蹤系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9379

原文標(biāo)題:唉,一次堆外內(nèi)存泄露讓整個(gè)團(tuán)隊(duì)通宵處理到爆肝!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MEMS陀螺工具定向短節(jié):測(cè)井領(lǐng)域的新型解決方案

    ER-Gyro-15 MEMS 陀螺工具定向短節(jié)的出現(xiàn),有效解決了這些難題。 高精度測(cè)量與快速對(duì)準(zhǔn) [ER-Gyro-15]采用基于地球自轉(zhuǎn)角速度感應(yīng)的陀螺定向技術(shù),不受磁場(chǎng)影響,在強(qiáng)磁場(chǎng)干擾的井段,也能保證方位測(cè)量的高精度。 可實(shí)現(xiàn)對(duì)井斜角、工具面角及
    的頭像 發(fā)表于 05-13 17:30 ?107次閱讀

    MEMS陀螺工具定向短節(jié)全新發(fā)布:石油鉆井技術(shù)的革新利器

    在石油鉆井行業(yè)中,精準(zhǔn)的井下定向、井眼軌跡控制、測(cè)量技術(shù)是確保作業(yè)高效、安全開展的關(guān)鍵。艾瑞科專為石油測(cè)井,定向鉆井打造可實(shí)現(xiàn)隨鉆測(cè)量或連續(xù)測(cè)量的MEMS陀螺工具定向短節(jié)--ER-Gyro-15正式發(fā)布。
    的頭像 發(fā)表于 05-06 10:45 ?301次閱讀
    MEMS陀螺<b class='flag-5'>工具定</b>向短節(jié)全新發(fā)布:石油鉆井技術(shù)的革新利器

    滾珠螺桿的精度如何保持?

    滾珠螺桿通常用于需要精確定位的地方,高機(jī)械效率、低傳遞扭矩和幾乎為零的軸向游隙,使?jié)L珠螺桿成為工具定位和飛機(jī)副翼驅(qū)動(dòng)等應(yīng)用中的重要設(shè)備。
    的頭像 發(fā)表于 05-05 17:59 ?99次閱讀
    滾珠螺桿的精度如何保持?

    Java開發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發(fā)者在用?

    Perforce JRebel是一款Java開發(fā)效率工具,旨在幫助java開發(fā)人員更快地編寫更好的應(yīng)用程序。JRebel可即時(shí)重新加載對(duì)代碼的修改,無需重啟或重新部署應(yīng)用程序,就能讓開發(fā)者即時(shí)看到代碼更改的效果,從而縮短開發(fā)、調(diào)
    的頭像 發(fā)表于 04-27 13:44 ?162次閱讀
    <b class='flag-5'>Java</b>開發(fā)者必備的效率<b class='flag-5'>工具</b>——Perforce JRebel是什么?為什么很多<b class='flag-5'>Java</b>開發(fā)者在用?

    內(nèi)存泄漏檢測(cè)工具Sanitizer介紹

    內(nèi)存泄漏,我們經(jīng)常會(huì)遇到,如何檢測(cè)內(nèi)存泄漏,除了我們之前講過的 valgrind,還可以使用 gcc 自帶的工具 sanitizer。
    的頭像 發(fā)表于 03-01 14:52 ?561次閱讀

    HarmonyOS NEXT 原生應(yīng)用/元服務(wù)-DevEco Profiler性能問題定位深度錄制

    快照,分析單個(gè)內(nèi)存快照或多個(gè)內(nèi)存快照之間的差異,定位ArkTS的內(nèi)存問題。 CPU:通過深度采集CPU內(nèi)核相關(guān)數(shù)據(jù),直觀地呈現(xiàn)出當(dāng)前選擇調(diào)優(yōu)應(yīng)用/元服務(wù)進(jìn)程的CPU使用率、CPU各核心
    發(fā)表于 02-24 16:06

    如何使用DevEco Studio性能調(diào)優(yōu)工具Profiler定位應(yīng)用內(nèi)存問題

    鴻蒙應(yīng)用開發(fā)過程中,可能由于種種原因?qū)е聭?yīng)用內(nèi)存未被正的使用或者歸還至操作系統(tǒng),從而引發(fā)內(nèi)存異常占用、內(nèi)存泄漏等問題,最終導(dǎo)致應(yīng)用卡頓甚至崩潰,嚴(yán)重影響用戶體驗(yàn)。
    的頭像 發(fā)表于 01-16 14:40 ?1587次閱讀
    如何使用DevEco Studio性能調(diào)優(yōu)<b class='flag-5'>工具</b>Profiler<b class='flag-5'>定位</b>應(yīng)用<b class='flag-5'>內(nèi)存</b>問題

    基于Java工具Power Stage Designer

    電子發(fā)燒友網(wǎng)站提供《基于Java工具Power Stage Designer.pdf》資料免費(fèi)下載
    發(fā)表于 11-14 16:01 ?8次下載
    基于<b class='flag-5'>Java</b>的<b class='flag-5'>工具</b>Power Stage Designer

    使用Arthas火焰圖工具Java應(yīng)用性能分析和優(yōu)化經(jīng)驗(yàn)

    分享作者在使用Arthas火焰圖工具進(jìn)行Java應(yīng)用性能分析和優(yōu)化的經(jīng)驗(yàn)。
    的頭像 發(fā)表于 10-28 09:27 ?1063次閱讀
    使用Arthas火焰圖<b class='flag-5'>工具</b>的<b class='flag-5'>Java</b>應(yīng)用性能分析和優(yōu)化經(jīng)驗(yàn)

    時(shí)間服務(wù)器與GNSS模擬器實(shí)現(xiàn)區(qū)域內(nèi)可靠的室內(nèi)定位

    一種基于區(qū)域的室內(nèi)定位方案。這個(gè)方案能夠?qū)崟r(shí)傳輸與特定區(qū)域對(duì)應(yīng)的虛擬GNSS信號(hào),而接收終端則無需額外的配置或軟件,即可實(shí)現(xiàn)定位,并且能夠平滑切換到真實(shí)的GNSS信號(hào)。 二、方案背景
    的頭像 發(fā)表于 09-12 10:14 ?557次閱讀
    時(shí)間服務(wù)器與GNSS模擬器實(shí)現(xiàn)<b class='flag-5'>區(qū)域</b>內(nèi)可靠的室內(nèi)<b class='flag-5'>定位</b>

    java反編譯的代碼可以修改么

    的影響。 1. Java反編譯工具Java反編譯領(lǐng)域,有一些知名的工具可以幫助開發(fā)者將字節(jié)碼轉(zhuǎn)換回源代碼。這些工具包括: JD-GUI
    的頭像 發(fā)表于 09-02 11:00 ?1170次閱讀

    怎么選人員定位技術(shù)?藍(lán)牙人員定位技術(shù)的優(yōu)勢(shì)

    隨著企業(yè)對(duì)人員安全及定位等方面的需求,人員定位的需求也是日益增加。那么企業(yè)如何選擇適合自身的定位方案呢?藍(lán)牙人員定位適合什么場(chǎng)景呢? 云酷科
    的頭像 發(fā)表于 08-02 09:24 ?394次閱讀
    怎么選人員<b class='flag-5'>定位</b>技術(shù)?藍(lán)牙人員<b class='flag-5'>定位</b>技術(shù)的優(yōu)勢(shì)

    使用RTC內(nèi)存的用戶區(qū)域來存儲(chǔ)值,發(fā)現(xiàn)某些區(qū)域已損壞或無法寫入,為什么?

    我正在嘗試使用RTC內(nèi)存的用戶區(qū)域來存儲(chǔ)值,但我發(fā)現(xiàn)某些區(qū)域已損壞或無法寫入。 我正在使用 NonOS SDK 2.2.1,并編寫了一個(gè)小程序來將隨機(jī)大小的數(shù)據(jù)塊寫入 RTC 用戶內(nèi)存
    發(fā)表于 07-09 06:39

    Java語言、idea開發(fā)工具、MYSQL數(shù)據(jù)庫開發(fā)的UWB定位技術(shù)系統(tǒng)源碼

    Java語言+?idea開發(fā)工具+?MYSQL?數(shù)據(jù)庫開發(fā)的 UWB定位技術(shù)系統(tǒng)源碼 實(shí)現(xiàn)人員/設(shè)備/車輛實(shí)時(shí)軌跡定位 UWB高精度人員定位
    的頭像 發(fā)表于 06-24 09:33 ?685次閱讀
    <b class='flag-5'>Java</b>語言、idea開發(fā)<b class='flag-5'>工具</b>、MYSQL數(shù)據(jù)庫開發(fā)的UWB<b class='flag-5'>定位</b>技術(shù)系統(tǒng)源碼

    基于java+單體服務(wù) +?硬件(UWB定位基站、卡牌)技術(shù)架構(gòu)開發(fā)的UWB室內(nèi)定位系統(tǒng)源碼

    基于java+單體服務(wù) + 硬件(UWB定位基站、卡牌)技術(shù)架構(gòu)開發(fā)的UWB室內(nèi)定位系統(tǒng)源碼 UWB定位技術(shù) 超寬帶定位 高精度
    的頭像 發(fā)表于 06-13 09:35 ?708次閱讀
    基于<b class='flag-5'>java</b>+單體服務(wù) +?硬件(UWB<b class='flag-5'>定位</b>基站、卡牌)技術(shù)架構(gòu)開發(fā)的UWB室內(nèi)<b class='flag-5'>定位</b>系統(tǒng)源碼