精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

對(duì)待棘手bug,新手與大牛的差距在哪里?

移動(dòng)開(kāi)發(fā) Android 開(kāi)發(fā)工具
自上上周起,團(tuán)隊(duì)中陸續(xù)有iOS開(kāi)發(fā)抱怨電腦特別卡。有細(xì)心的同學(xué)發(fā)現(xiàn),因?yàn)閄code占用了約6-7G內(nèi)存,而部分mac只有8G內(nèi)存,所以?xún)?nèi)存爆滿(mǎn)引起卡頓。

[[204255]]

問(wèn)題描述:

  • 自上上周起,團(tuán)隊(duì)中陸續(xù)有iOS開(kāi)發(fā)抱怨電腦特別卡。有細(xì)心的同學(xué)發(fā)現(xiàn),因?yàn)閄code占用了約6-7G內(nèi)存,而部分mac只有8G內(nèi)存,所以?xún)?nèi)存爆滿(mǎn)引起卡頓。
  • 而部分同學(xué)的mac是16G內(nèi)存的,比如我(嘲諷臉),因?yàn)閮?nèi)存充足沒(méi)感覺(jué)到卡。
  • 但這個(gè)問(wèn)題影響團(tuán)隊(duì)的開(kāi)發(fā)效率,所以需要去解決問(wèn)題。

內(nèi)存對(duì)比:

在沐浴更衣焚香、殺進(jìn)程、清緩存后,分別拉取相鄰的812版本代碼和816版本代碼分別編譯,得到結(jié)論:

  • 812調(diào)試時(shí),占用2G內(nèi)存
  • 816調(diào)試時(shí),占用6.8G內(nèi)存

吐槽:

  • 對(duì)于這個(gè)數(shù)據(jù),我們內(nèi)心是拒絕接受的。有如下2點(diǎn)吐槽:
  1. 如果代碼亂申請(qǐng)內(nèi)存,那么內(nèi)存爆掉的應(yīng)該是模擬器或真機(jī)。而不該是Xcode
  2. 如果當(dāng)前版本新增10w行代碼(其實(shí)不到),對(duì)總代碼量增長(zhǎng)不超10%,Xcode內(nèi)存怎么可能翻兩翻。
  • 所以我們覺(jué)得,這一定是蘋(píng)果的鍋,我們不背

但是不管是誰(shuí)的鍋,肯定是代碼或者配置觸發(fā)的,分析還要繼續(xù)。

分析方法選擇:

  • 擺在我們面前有2個(gè)分析方法:
  1. 找代碼:通過(guò)二分法,編譯不同日期的版本,找到引發(fā)問(wèn)題的那次提交,確定是哪個(gè)改動(dòng)引起
  2. 找內(nèi)存:分析增大的內(nèi)存是什么,根據(jù)增大的內(nèi)容分析問(wèn)題出在哪。
  • 如果使用方法1,編譯一次代碼需要15分鐘,假設(shè)問(wèn)題是某一行代碼引起的,估計(jì)需要找一天。如果是某多行代碼組合影響的問(wèn)題,時(shí)間會(huì)更長(zhǎng)。而且就算找到代碼,也未必知道原理是什么。
  • 所以我選擇**方法2**,不行再退到方法1

分析步驟:

我在run的時(shí)候發(fā)現(xiàn):

  • 812初次打開(kāi)代碼內(nèi)存1G以?xún)?nèi),編譯運(yùn)行時(shí)內(nèi)存2G,關(guān)閉Xcode后再打開(kāi)內(nèi)存2G
  • 816初次打開(kāi)代碼內(nèi)存1G以?xún)?nèi),編譯運(yùn)行時(shí)內(nèi)存6G,關(guān)閉Xcode后再打開(kāi)內(nèi)存6G

關(guān)閉Xcode后再打開(kāi),此時(shí)Xcode并沒(méi)有run,所以推測(cè)他在做一件事:讀緩存

緩存文件: 

  • 大家都知道,Xcode編譯一個(gè)新工程會(huì)很慢,但是第二次編譯就很快。那是因?yàn)樗丫幾g結(jié)果存到了緩存文件中。第二次編譯只讀文件不編譯自然就快了。
  • 緩存文件存儲(chǔ)在“/Users/你的用戶(hù)名/Library/Developer/Xcode/DerivedData”目錄下
  • 812和816版本的緩存文件對(duì)比如下:

  • 初步可以看出,緩存文件數(shù)量一致,但是大小差距很大。所以下一步就是來(lái)找茬:到底誰(shuí)變大了
  • 經(jīng)過(guò)一番尋找,發(fā)現(xiàn)每個(gè)類(lèi)會(huì)生成三個(gè)文件:

.o文件:二進(jìn)制對(duì)象文件,不多說(shuō)

.d文件:文本文件,記錄該類(lèi)依賴(lài)的所有文件路徑

.dia文件:未知二進(jìn)制文件,但是變大的就是它

  • dia是有一部分變大了,一部分沒(méi)變。嘗試用二進(jìn)制工具打開(kāi)讀了一下,有驚喜:

  • 這不就是warning嘛

我的吐槽又來(lái)了:

  • 是誰(shuí)!站出來(lái)!**寫(xiě)了4個(gè)G的warning!**

繼續(xù)分析:

那具體是什么導(dǎo)致的warning呢,面對(duì)幾千個(gè).dia文件,我內(nèi)心是崩潰的。

  • 幸好找基友溝通,剛好他做了代碼warning掃描,發(fā)現(xiàn)816比812只是某組代碼多了107個(gè)warning,其他組沒(méi)變化,而且是nonnull相關(guān)warning,并不重要所以沒(méi)追究。
  • 我們找到107處warning的代碼,查看提交記錄,就是在大家反饋卡頓之前。貌似就是它了。我們把warning解了,clean重新編譯,問(wèn)題得解。

問(wèn)題雖解,但是遺留2個(gè)問(wèn)題:

  1. 怎么就提交了107個(gè)warning?
  2. 區(qū)區(qū)107個(gè)warning。為啥會(huì)導(dǎo)致內(nèi)存飆升?我們還剩幾百個(gè)warning為啥沒(méi)問(wèn)題?

問(wèn)題1:

  • 引發(fā)107個(gè)warning的只有一行代碼
  • 對(duì)于nonnull相關(guān)warning蘋(píng)果的潛規(guī)則是這樣的:

自Xcode6起提供的新功能,可以申明一個(gè)函數(shù)的參數(shù)是必傳的(nonnull)還是可選的(nullable) ,這會(huì)讓代碼更嚴(yán)謹(jǐn),我們是推薦使用的

兼容老代碼:整個(gè)頭文件都沒(méi)有nonnull/nullable申明的,編譯沒(méi)毛病

對(duì)新代碼高要求:只要給代碼中添加了一個(gè)nonnull/nullable,剩余的代碼也必須添加,否則其他每個(gè)接口就會(huì)有warning

  • 所以,這次涉案的代碼是個(gè)舊工具類(lèi),有107個(gè)函數(shù)。新增的一行代碼添加了nonnull。于是產(chǎn)生了107個(gè)warning

問(wèn)題2:

舉個(gè)例子,有A B C三個(gè)類(lèi)

  • A.h有一個(gè)warning,其.dia文件中會(huì)如下信息:

insert '_Nullable' if the pointer may be null

insert '_Nonnull' if the pointer should never be null

  1. A.m文件絕對(duì)路徑
  2. A.h文件絕對(duì)路徑
  3. A.m文件第幾行引用了A.h,存在warning
  4. warning在A.h的位置
  5. warning描述是:pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
  6. fix的兩種方法:
  • 總之,一處warning的信息大約是1k
  • 如果B引用了A,則B的.dia文件包含如上所有信息,以及多個(gè)B的文件路徑,即B的描述信息超過(guò)A
  • 如果C引用了B,而B(niǎo)在頭文件中引用了A,則C的描述信息超過(guò)B

所以

  • 在工程上,107warning的文件,dia約130k。
  • 所有直接間接引用的文件數(shù)量大概2500,單個(gè)文件都超過(guò)130k。文件大小約350M。
  • 加上模擬器有2個(gè)cpu架構(gòu)(i386/x86_64),會(huì)生成2份文件,緩存中還有個(gè)聚合的dgph文件。以及文件在內(nèi)存中結(jié)構(gòu)化后占用的內(nèi)存空間。
  • 所以最終翻了幾倍,達(dá)到4G的內(nèi)存占用是可以理解的。

結(jié)論:

  • 不要忽略warning,特別是頭文件中的warning,會(huì)被多處引用導(dǎo)致過(guò)大的描述信息
  • 頭文件中盡量不要import頭文件,會(huì)造成過(guò)度的引用,放大問(wèn)題。

后續(xù):

  • 818版本已經(jīng)fix了core中的所有nonnull問(wèn)題。后續(xù)逐步將warning清零
  • fix后內(nèi)存占用如圖

PS:這是蘋(píng)果的bug么?我覺(jué)得還是自己挖坑把自己埋了。

【本文為51CTO專(zhuān)欄作者“阿里巴巴官方技術(shù)”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2010-08-27 07:54:06

開(kāi)發(fā)高手

2012-05-18 09:34:19

程序員

2021-01-23 23:27:13

人工智能深度學(xué)習(xí)數(shù)據(jù)

2015-04-08 15:38:17

程序員程序員差距

2012-05-10 13:31:48

程序員開(kāi)發(fā)者

2022-02-24 17:32:38

程序員互聯(lián)網(wǎng)公司離職率

2015-10-09 09:11:39

html5原生App區(qū)別

2020-05-27 11:29:29

GDPR數(shù)據(jù)安全數(shù)據(jù)泄露

2017-12-25 10:16:32

程序員Python常用工具

2020-09-24 09:53:48

WebhooksAPI數(shù)據(jù)

2009-06-23 09:07:38

2018-07-17 10:50:09

2022-07-01 21:13:46

NFT加密SuperRare

2018-11-26 15:04:49

SDN網(wǎng)絡(luò)數(shù)據(jù)中心

2021-02-01 10:46:32

多云云安全云計(jì)算

2010-08-09 09:09:36

Linux與BSD的區(qū)

2023-07-07 15:11:51

智慧城市智能電網(wǎng)

2010-11-17 09:07:39

2010-12-14 15:40:36

Web設(shè)計(jì)師

2012-01-01 19:25:02

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久一区二区三区视频| 在线播放国产视频| 日韩在线资源| 国产精品综合在线视频| 久久免费精品视频| 亚洲理论片在线观看| 久久久久久久性潮| 亚洲综合色区另类av| 久久久久久亚洲精品不卡4k岛国| 久久这里只有精品9| 天天揉久久久久亚洲精品| 精品国产在天天线2019| 熟妇人妻va精品中文字幕| 久久综合之合合综合久久| 成人黄页在线观看| 国产在线久久久| av大片免费在线观看| 久久美女精品| 亚洲精品videossex少妇| 污污网站免费看| 毛片在线导航| 中文字幕一区二区三区四区| 国产一区二区三区四区hd| 伊人网免费视频| 国产精品久久久亚洲一区| 俺去亚洲欧洲欧美日韩| 97超碰在线免费观看| 免费欧美网站| 欧美天天综合网| 欧美一区二区中文字幕| 91亚洲天堂| 国产欧美综合在线观看第十页 | 亚洲日日夜夜| 色偷偷久久一区二区三区| 大陆av在线播放| 老司机99精品99| 国产免费观看久久| 久久精品丝袜高跟鞋| 亚洲国产精彩视频| 精品一区二区三区在线播放 | 日韩欧美亚洲视频| 欧美1区2区3区| 中日韩美女免费视频网址在线观看 | 色偷偷www8888| 欧美女优在线视频| 日韩精品视频在线观看网址| 日本一区二区免费视频| 99综合久久| 欧美日韩亚洲综合| 欧美性猛交xxx乱久交| 亚洲妇女成熟| 欧美日韩一区二区在线 | 午夜一区二区三区不卡视频| 久久久久久久成人| 久草福利资源在线观看| 欧美精品99| 欧美日韩国产二区| www.色小姐com| 中文字幕午夜精品一区二区三区| 日韩在线国产精品| 性爱在线免费视频| 久久视频在线| 精品国偷自产在线| 69夜色精品国产69乱| 99久久影视| 久久国产精品久久久久| 丰满少妇被猛烈进入一区二区| 天天做天天爱天天综合网2021 | 美国美女黄色片| 狠狠做六月爱婷婷综合aⅴ| 国产亚洲精品久久久| 国产精品情侣呻吟对白视频| 首页国产精品| 久久综合网hezyo| 欧美激情国产精品免费| 亚洲激情女人| 欧美重口另类videos人妖| 国产性生活视频| 青青草原综合久久大伊人精品优势| 国产精品高潮呻吟视频| 97超碰国产在线| 国产乱码精品一区二区三区av| 97se在线视频| 三级毛片在线免费看| 久久精品亚洲国产奇米99 | 久久久久午夜电影| 欧美福利小视频| 毛片视频网站在线观看| 日本不卡一区二区| 99re在线播放| 黄视频在线播放| 国产精品理论片| 男人的天堂avav| 裤袜国产欧美精品一区| 欧美日韩久久一区| 在线观看免费视频国产| 欧美激情在线精品一区二区三区| 久久精品美女视频网站| 久久精品这里有| 日本三级亚洲精品| 99视频免费观看蜜桃视频| 亚欧在线观看视频| 中文字幕亚洲成人| 香港三级韩国三级日本三级| 欧美成人毛片| 日韩激情av在线播放| 色偷偷男人天堂| 亚洲久久在线| 国产精品综合久久久| 日本加勒比一区| 欧美精彩视频一区二区三区| 2018中文字幕第一页| 在线成人视屏 | 婷婷夜色潮精品综合在线| 欧美精品一区二区三区免费播放| 日韩一区二区三区在线看| 亚洲午夜未满十八勿入免费观看全集| 2021亚洲天堂| 日韩av一二三| 久久99精品国产一区二区三区| 日本三级在线播放完整版| 一本一本大道香蕉久在线精品| 女人扒开腿免费视频app| 欧美在线电影| 浅井舞香一区二区| 免费看黄色一级视频| 亚洲私人黄色宅男| 波多结衣在线观看| 亚欧日韩另类中文欧美| 欧美国产日本在线| 国产又黄又大又粗的视频| 久久亚洲欧美国产精品乐播| 成人免费在线网| 欧美午夜网站| 久久精品国产亚洲7777| 中国一级片黄色一级片黄| 久久一日本道色综合| 日韩网站在线免费观看| 久久综合偷偷噜噜噜色| 丝袜美腿亚洲一区二区| 日韩av免费播放| 91香蕉国产在线观看软件| 精品无码一区二区三区爱欲| 一区二区三区亚洲变态调教大结局| 色黄久久久久久| 999视频在线| 久久先锋影音av鲁色资源网| 97国产精东麻豆人妻电影| 国产精品极品| 91精品国产91久久久| 黄色福利在线观看| 亚洲电影一区二区| 波多野结衣办公室双飞| 亚洲三级影院| 精品欧美国产| 中文在线а√天堂| 亚洲欧美一区二区三区四区| 国产一级精品视频| 久久久久国产一区二区三区四区| 日批视频在线免费看| 九九亚洲视频| 国产精品第10页| 3p在线观看| 欧美一级午夜免费电影| 妺妺窝人体色www婷婷| 成人自拍视频在线| 国产黄色一级网站| 免费欧美一区| 国产精品久久久久久超碰| 秋霞午夜在线观看| 日韩欧美激情四射| 日韩免费观看一区二区| wwww国产精品欧美| 亚洲欧美国产日韩综合| 五月天综合网站| 99精品国产一区二区| av有码在线观看| 亚洲老头老太hd| 亚洲熟女乱色一区二区三区久久久| 国产精品第五页| 无码人妻久久一区二区三区蜜桃| 91久久在线| 日韩一区二区电影在线观看| 欧美成人家庭影院| 久久久久在线观看| 国产九九在线| 日韩一级高清毛片| 国产婷婷色一区二区在线观看 | 欧洲精品一区色| 国产精品毛片aⅴ一区二区三区| 欧美激情区在线播放| 免费毛片在线| 欧美一二三四在线| 久久免费激情视频| 亚洲男人电影天堂| 国产一级二级在线观看| 久久精品国产精品亚洲红杏| 男人添女荫道口图片| 精品一区av| 国产91亚洲精品一区二区三区| a日韩av网址| 美女黄色丝袜一区| 无码精品人妻一区二区| 欧美三级视频在线| 久久不卡免费视频| 国产精品久久久久婷婷| 先锋资源av在线| 久国产精品韩国三级视频| 缅甸午夜性猛交xxxx| 香蕉久久网站| 欧美不卡三区| 一区中文字幕电影| 国产精品男女猛烈高潮激情| 9765激情中文在线| 精品国产一区二区三区在线观看| 无码h黄肉3d动漫在线观看| 91精品国产欧美日韩| www.欧美色| 五月激情六月综合| 国产极品国产极品| 中文av一区特黄| 精品无码在线视频| 懂色av一区二区夜夜嗨| 色免费在线视频| 日日嗨av一区二区三区四区| 黄色一级片在线看| 午夜精品久久久久99热蜜桃导演| 亚洲精品成人a8198a| 亚洲精品进入| 黑人另类av| 国产劲爆久久| 亚洲自拍偷拍视频| 91麻豆精品国产综合久久久 | 国产精品美女久久久久人| 日韩av电影免费观看高清| 国产嫩草在线视频| 欧美精品日韩三级| 大片免费在线观看| 日韩日本欧美亚洲| 中文字幕日本在线| 中文字幕国产亚洲| avtt亚洲| 日韩在线观看高清| 视频免费一区| 最近2019中文字幕一页二页| 成人高潮成人免费观看| 国产一区二区三区视频| 高h视频在线| 国产一区二区美女视频| 暖暖视频在线免费观看| 亚洲全黄一级网站| 日本护士...精品国| 亚洲美女喷白浆| 欧美婷婷久久五月精品三区| 日韩精品中文字幕在线观看| 天天摸天天碰天天爽天天弄| 亚洲精品大尺度| 免费在线黄色电影| 中日韩美女免费视频网站在线观看| av网站在线播放| 久久亚洲综合国产精品99麻豆精品福利 | 亚洲天堂av高清| 成人免费黄色网页| 精品国产一区二区三区在线观看 | 日韩在线视频精品| 亚洲一区二区在线观| 亚洲精品二区三区| 久草视频国产在线| 香蕉亚洲视频| 99热一区二区| 国产成人精品亚洲日本在线桃色 | 国产精品天天摸av网| 国产精品久久久久久成人| 亚洲蜜臀av乱码久久精品蜜桃| 久久久精品国产sm调教网站| 欧美日韩一二三四五区| 中文字幕一级片| 欧美大片一区二区| 亚州男人的天堂| 中文字幕日韩欧美精品在线观看| 中文字幕免费高清电视剧网站在线观看| 欧美国产日本在线| 午夜激情成人网| 成人福利视频在线观看| 韩国精品福利一区二区三区| 91久久久久久久久久| 日韩一区二区三区在线免费观看| 国产欧美一区二区三区视频| 亚洲午夜免费| 精品国产一区二区三区久久久久久| 久久久久影视| 欧美影视一区二区| 999国产精品999久久久久久| 三级在线免费观看| 久久在线精品| 99久久99精品| 成人激情动漫在线观看| 成人18视频免费69| 亚洲影院免费观看| 久久精品视频2| 欧美精品123区| 男人天堂手机在线观看| 中文字幕免费国产精品| 在线观看a级片| 日本电影亚洲天堂| youjizz欧美| 欧美亚洲精品日韩| 亚洲精品二区三区| 日韩av片网站| 成人97人人超碰人人99| 97人妻精品一区二区免费| 最新国产の精品合集bt伙计| 欧美日韩在线视频免费播放| 欧美性猛xxx| 国产精品综合在线| 日韩精品黄色网| 午夜伦理大片视频在线观看| 69精品小视频| 99久久亚洲国产日韩美女 | 国产又粗又猛又爽| 亚洲高清免费观看高清完整版| 成码无人av片在线观看网站| 人九九综合九九宗合| 亚洲欧洲二区| 一本一本a久久| 99综合视频| 午夜一区二区视频| 国产欧美一区二区精品仙草咪| 欧美黄色一级网站| 69堂成人精品免费视频| 九一国产在线| 国内精品在线一区| 第一区第二区在线| 91免费网站视频| 久久福利毛片| 30一40一50老女人毛片| 亚洲精品国产无套在线观| 国产99999| 日韩中文字幕国产精品| 黑人巨大精品| 免费看成人片| 亚洲欧洲一区| 欧亚乱熟女一区二区在线| 亚洲欧美激情小说另类| 亚洲视频在线观看免费视频| 中文字幕在线亚洲| 国产精品亚洲一区二区三区在线观看| 久久99精品久久久久久秒播放器| 欧美日韩国产欧| 男人添女人下面免费视频| 国产精品青草综合久久久久99| 亚洲天堂一区在线观看| 亚洲电影免费观看高清完整版在线观看| 四虎影视国产在线视频| 91精品视频观看| 欧美激情亚洲| 亚洲三级在线视频| 亚洲欧美精品午睡沙发| 国产91绿帽单男绿奴| 九九九久久久久久| 91精品丝袜国产高跟在线| 潘金莲一级淫片aaaaa免费看| 日本不卡一二三区黄网| 麻豆明星ai换脸视频| 精品欧美黑人一区二区三区| 手机av在线播放| 久久综合给合久久狠狠色| 天堂久久久久va久久久久| 婷婷色一区二区三区| 欧美日韩一级片网站| 综合图区亚洲| 成人区精品一区二区| 亚洲一区二区动漫| 亚洲第一页av| 欧美区视频在线观看| 精品美女在线观看视频在线观看| 国产精品久久久久久久久久久久久| 久久视频在线| 1314成人网| 精品欧美激情精品一区| 美国一级片在线免费观看视频 | 在线视频欧美日韩| 99久久亚洲国产日韩美女| 久久精品在线免费视频| 成人免费视频一区二区| 蜜臀尤物一区二区三区直播| 中文字幕av一区二区| 欧美videos粗暴| 青春草国产视频| 91亚洲精品久久久蜜桃| 在线免费观看中文字幕| 欧美另类第一页| 国产欧美日韩影院| 中文字幕免费高清在线| 一区二区在线观看免费视频播放| 完全免费av在线播放| 色妞一区二区三区| 日本韩国欧美超级黄在线观看| 午夜激情福利在线| 综合av第一页|