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