每個(gè)人都希望他們的應(yīng)用程序非常流暢。你已經(jīng)工作了幾年了,你有很多經(jīng)驗(yàn),但是為什么你的應(yīng)用程序仍然卡住而且很慢?
Android手機(jī)的開發(fā)語言是Java(kotlin也是Java的包裝),Java本身有一個(gè)非常好的內(nèi)存管理機(jī)制,稱為GC。然而,GC經(jīng)常遇到無法回收的內(nèi)存,例如,內(nèi)存泄漏、內(nèi)存抖動(dòng),結(jié)果可能是一個(gè)OOM。
JAVA編程可以跨平臺(tái),但運(yùn)行效率相對(duì)于iOS的Objective-C編程要低,運(yùn)行時(shí)需要占用大量內(nèi)存來換取執(zhí)行速度,再加上不定期的內(nèi)存自動(dòng)回收機(jī)制,出現(xiàn)的現(xiàn)象就是卡頓。隨著安裝程序越多,程序運(yùn)行時(shí),大量的系統(tǒng)垃圾和后臺(tái)運(yùn)行占據(jù)了很多資源,如果你沒做好性能優(yōu)化,你的app就會(huì)又卡又慢,甚至直接黑屏死機(jī),嚴(yán)重影響手機(jī)的正常使用體驗(yàn)。
為了避免這些問題,我們必須熟悉JVM。
為什么有人說JVM是每個(gè)Android開發(fā)者都應(yīng)該掌握的技能?
如果要進(jìn)行性能優(yōu)化,虛擬機(jī)對(duì)象分配、垃圾收集、線程調(diào)度、磁盤管理都與設(shè)備的性能有關(guān)。
從知識(shí)系統(tǒng)的角度來看,了解虛擬機(jī)可以加深你對(duì)語言的理解,這對(duì)系統(tǒng)調(diào)優(yōu)很有幫助,會(huì)讓你寫出高效低成本的代碼。
從實(shí)踐發(fā)展角度,在Android開發(fā)上,各大熱修復(fù)技術(shù)方案,熱更新等很多問題時(shí)候都離不開你對(duì)虛擬機(jī)管理機(jī)制的研究,因?yàn)槲覀兒芏喙ぷ鲿r(shí)候你需要hook某些虛擬機(jī)的實(shí)現(xiàn),如果不了解學(xué)生怎么成為可能可以做得到,例如通過阿里的sophix。
Jvm將運(yùn)行時(shí)數(shù)據(jù)劃分為線程私有和共享數(shù)據(jù)區(qū)域。線程專用數(shù)據(jù)區(qū)域包含程序計(jì)數(shù)器、虛擬機(jī)堆棧和局部方法區(qū)域。所有線程共享的數(shù)據(jù)區(qū)域包含java堆、方法區(qū)域,并且在方法區(qū)域中有一個(gè)常量池。內(nèi)存泄漏是指系統(tǒng)無法回收已分配但未使用的內(nèi)存。打個(gè)比方,就像你家的水龍頭沒開,水就漏了。
內(nèi)存泄漏分為:
頻繁的內(nèi)存泄漏,偶爾的內(nèi)存泄漏,一次內(nèi)存泄漏,隱式內(nèi)存泄漏。
隱式內(nèi)存泄漏問題非常重要有害,因?yàn)闆]有它們比常規(guī)的、偶爾的內(nèi)存泄漏更難進(jìn)行檢測。內(nèi)存泄漏的累積將消耗管理系統(tǒng)中的所有這些內(nèi)存!
APP性能優(yōu)化是android開發(fā)者應(yīng)該具備的一項(xiàng)綜合素質(zhì),也是開發(fā)者能夠完成高質(zhì)量應(yīng)用作品的保證。
關(guān)于JVM的核心原則,你知道些什么?我們?nèi)绾问褂肑VM原則來指導(dǎo)代碼實(shí)踐?我們?nèi)绾卧诩軜?gòu)層次上優(yōu)化產(chǎn)品性能?谷歌工程師如何實(shí)施性能和功能改進(jìn)技術(shù)?在項(xiàng)目的總體框架設(shè)計(jì)中應(yīng)該使用哪些優(yōu)化技術(shù)?