vip01 - david線程執行原理課件_第1頁
vip01 - david線程執行原理課件_第2頁
vip01 - david線程執行原理課件_第3頁
vip01 - david線程執行原理課件_第4頁
vip01 - david線程執行原理課件_第5頁
已閱讀5頁,還剩44頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Android高級開發試聽課碼牛學院-用代碼碼出精彩的人生David老師復旦大學工程碩士,原Oppo資深研發工程師,網易特邀Android講師,

River老師《Android開發入門與實戰第二版》作者之一Zee老師

中南大學計算機信息專業畢業,前新浪架構師,58同城項目負責人David老師QQ:1051917835

Andy老師華中科技大學計算機相關專業碩士,騰訊架構師

講師介紹

Damon老師

前三星研發高級工程師Thread線程源碼解析從Android虛擬機層看java線程執行原理1Java線程執行,是jvm線程還是linux線程2線程棧執行原理與java對象設計思想3線程池與線程機制4深入linux內核發現java線程真相20:05開始開車視頻資料加叮當老師微信技術點:David老師復旦大學工程碩士,原Oppo資深研發工程師,網易特邀Android講師,

River老師《Android開發入門與實戰第二版》作者之一Zee老師

中南大學計算機信息專業畢業,前新浪架構師,58同城項目負責人David老師QQ:1051917835

Andy老師華中科技大學計算機相關專業碩士,騰訊架構師

講師介紹

Damon老師

前三星研發高級工程師為什么要學習java線程有利于解決并發問題:定義

在開發者中最頭疼的不是完成業務邏輯的開發,是并發出現了異常,難以排查解決能夠弄清楚線程的作用:就多年java開發+Android開發的程序員,不知道java線程是什么,他的本質,有助于理解底層:就Android的內核是jvm。線程也是jvm的。線程的原理有助于理解java設計的這門語言01為什么會有線程線程由來早期:在OS中一直都是以進程作為能擁有資源和獨立運行的基本單位.后來人們又提出了比進程更小的能獨立運行的基本單位-線程(Threads)

試圖通過它來提高系統內程序并發執行的程序,從而進一步提高系統的吞吐量.后來多處理機系統得到迅速發展

線程能比進程更好的提高程序的并發執行程序,充分發揮多處理機的優越性.進程的缺點1進程在同一時間只能干一件事2、進程在執行的過程中如果阻塞,整個進程就會掛起,即使進程中有些工作不依賴于等待的資源,仍然不會執行。線程的優點1、從資源上來講:線程是一種非常"節儉"的多任務操作方式。在linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種"昂貴"的多任務工作方式。2、從切換效率上來講:運行于一個進程中的多個線程,它們之間使用相同的地址空間,而且線程間彼此切換所需時間也遠遠小于進程間切換所需要的時間。據統計,一個進程的開銷大約是一個線程開銷的30倍左右。3、從通信機制上來講:線程間方便的通信機制。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過進程間通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進城下的線程之間貢獻數據空間,所以一個線程的數據可以直接為其他線程所用,這不僅快捷,而且方便。01面試:進程和線程的區別是什么CPU是工廠計算機的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運行。假定工廠的電力有限,一次只能供給一個車間使用。也就是說,一個車間開工的時候,其他車間都必須停工。背后的含義就是,單個CPU一次只能運行一個任務。進程進程就好比工廠的車間,它代表CPU所能處理的單個任務。任一時刻,CPU總是運行一個進程,其他進程處于非運行狀態。

線程一個車間里,可以有很多工人。他們協同完成一個任務。

AndroidFramework02

系統內核層關于內存詳解課程小結用戶點擊應用圖標ActivityThreadMain函數App進程Android內核層內存分布各個區域詳解方法區:方法區存放了類的信息(class字節碼的信息),靜態變量、處理邏輯的指令集

方法區的數據主內存堆區:用來存儲對象實例,被所有線程共享的一塊內存區域,在App啟動時創建,

堆區的數據放在主內存

虛擬機棧區:存儲方法的局部變量,每次開啟一個線程都會創建一個虛擬機棧,線程私有,生命周期與線程相同棧區的數據高速緩沖區執行引擎:將方法區中對應方法的arm指令集加載到棧區,而棧區存在于高速緩沖區中,cpu是直接從高速緩沖區取arm指令,一條一條執行。執行引擎就像一個中介,方法對應的arm指令相當于交易的物品內存原理高速緩沖區2核4核3核1核Singletonsingleton;高速緩沖區高速緩沖區:

通常的說法主存其實就是內存,而高速緩沖區屬于位于CPU與主內存之間的高速存儲器,。它的容量比內存小但交換速度快。它的存取速度與CPU持平。由于CPU執行速度非???,而主內存執行速度相對慢很多,需要將數據提前加載到高速緩沖區中。高速緩沖區價格非常昂貴,一般不超過12M,例如i7中最先進的型號,三級緩存也不過12M。內存原理8G內存4M三級緩存方法區堆區棧區內存原理主內存方法區堆區0000:new-instancev0,0002:invoke-direct{v0},0005:return-objectv0執行引擎棧區0000:new-instancev0,0002:invoke-direct{v0},0005:return-objectv0cpu高速緩沖區0000:new-instancev0,0002:invoke-direct{v0},0005:return-objectv0加載壓棧03為什么虛擬機要設計方法區,堆區呢?為什么虛擬機要設計方法區,堆區呢?Java這門語言最大的優勢是不用程序員管理內存創建于回收,Oracle為了管理java對象運行機制(生命周期)設計了方法區與堆區。誰來管理,當然還是C++來。方法區和堆區的設立只是為了好管理

在linux系統這些區域本身都不存在,

如果我們不設立方法區和堆區,可以想象下下面兩種場景:1如果沒有方法區,每次創建對象需要從磁盤加載字節碼,然后new出來性能是多么低下2如果沒有堆區,每次創建都需要加載一個對象,并且攜帶對應的class,將會需要多少內存虛擬機給App的內存我們該怎么理解呢 Android虛擬機在linux中的申請內存可以理解為一次性malloc了一大塊的內存,而內存中就有方法區和堆區

開啟一個App代表虛擬機malloc一次內存比如50M,如果運行了10個App,那就是500M。虛擬機占Linux的內存有500M

然后由虛擬機自己管理內部對象的分配.由于回收需要知道對象占多大空間,

所以在分配對象時,除了對象本身我們看得見的字段外,還需要對象的描述信息,這就是對象對象的中隱含的klass

直覺來看如果靠猜并不能解決心中的疑惑,只要在正在jdk源碼中找到分配給對象的klass就能證明klass是Android所有對象的源頭Android虛擬機方法區和堆區本質是什么?在C語言中使用內存直接通過指針方式訪問內存的某個數據,指針的作用就是指向了這段數據所在的buffer起始地方而對于java對象來說,雖然經過了jvm的一層屏蔽,把指針這個概念給隱去了,但對象終歸是要存在內存當中的.我們知道java有各種各樣的class,在內存中分配對象時,class就是對應要分配的對象模板,對象占多大空間,每個字段在此空間內的偏移值,等等信息,都由class的定義提供.對于GC來說,必須知道對象占多大空間,才好在回收時把相應的內存釋放,不然就沒辦法準確的管理了

Java對象模型:OOP-Klass模型先簡單地介紹一下Android中實現的Java的對象模型機制。在JVM中,并沒有直接將Java對象映射成C++對象,而是采用了oop-klass模型,主要是不希望每個對象中都包含有一份Class類型OOP(OrdinaryObjectPoint)表示對象的實例信息Klass,是Java類的在C++中的表示,用來描述Java類的信息Java對象模型:OOP-Klass模型簡單地說,一個Java類在JVM中被拆分為了兩個部分:數據和描述信息,分別對應OOP和KlassOOP表示java對象應該承載的數據

java對象klassKlass表示描述對象有多大,函數地址,對象大小,靜態區域大小05我們從哪里去找klass的信息呢從哪里找分配java對象和klass的源碼查找klass在SDK層層否找到klass聲明的信息FrameWork層有沒有klassAndroid系統源有沒有klass的信息JDK源碼有沒有Klass的信息JDK是編譯好的工具,那源碼到底在哪Java對象構建過程Personperson=newPerson這段代碼是非常熟悉的了。但是在JVM中并不是這樣執行的而是轉換成了new指令Java對象原理Java的對象結構聲明在/src/share/vm/oopsOop是java對象的意思,在虛擬機源碼中我們可以找到這樣一個類叫oop.hpp他就是我們所說的java對象。真正的java對象在JVM虛擬機中的一個體現Java對象原理Java的對象結構聲明在/src/share/vm/oops//hotspot/src/share/vm/oops/oop.hppclassoopDesc{private:volatilemarkOop_mark;union_metadata{Klass*_klass;narrowKlasspressed_klass;}_metadata;}Java對象oopDesc則是Java對象頭的結構.除了預想中的Klass(之所以叫kclass是因為class是C++關鍵字)指針外,還由一個_mark字段,是因為除了對象的class信息以外,還有一些對象信息需要保留,比如GC年齡,鎖狀態等.Java對象在內存中的結構1._mark:占用8個字節用于存儲對象自身的運行時數據,如哈希碼(HashCode)、GC分代年齡、鎖狀態標志等2.class對象指針:占用8個字節如果開啟指針壓縮的話則占用4個字節即對象指定的是那個實例對象Java對象指向的klassJava對象指向的klass面試官:第一個問題好像難不倒你,那接下來看這個問題怎么接招。直到你回答不上來,我就能大致明白你工作了多久,技術水平怎么樣面試心理分析心理分析:這個問題確實有些難度,不能從dex與class簡單的區別(class是)入手了。比較考對dex文件和class文件理解的深度。從文件格式的差異,指令集加載流程入手。課程小結一線大廠面試訣竅簡歷包裝:

簡歷一定要吸引,把最好的兩個項目經驗放在最前面備戰簡歷:

簡歷里面的技術寫自己最熟悉和擅長的,每個技術準備對應的連環炮深挖底層:

底層技術一時半會學不懂,找到高頻點,如虛擬機原理,區別,準備5個左右吃鬧架構:

架構一定要好好看,比如Glide,Okhttp,MVVM,MVP架構實現一定要掌握掌握源碼:

簡一定要了解FrameWork層源碼,如AMS,PMS,Handler,屬性動畫如何快速學習提升自學要找學習資料,網上資料不準確,官方文檔無人總結

碰到問題耗很久,很難找人幫忙指點、解答

太耗時、太低效

沒有實際的項目可以實踐,學了感覺沒用

學不全面、學不系統太難、太苦逼了、堅持不下去但是,現在你不需要這么苦逼了?。?!

怎么成為Android高級工程師?課程簡介:深入講解Android內核、性能優化、架構設計、高級音視頻技術在小型企業,技術視野太窄,沒經歷過正規的移動開發流程缺少一線互聯網公司經驗01長期從事簡單的UI界面開發,對原理和底層開發了解不深基礎知識薄弱02長期在小型軟件公司、外包公司工作,只接觸部分開發內容項目經驗零碎03只招收真心想和我們一起學習,共同進步的朋友??释焖偬嵘约?4騰訊課堂權威保障01支付保障騰訊課堂為保障學員支付安全,采用淘寶中間機制,直接打款給騰訊,同時監督碼牛教學質量和后續服務02師資力量師資來自于一線BAT,有著雄厚的技術實力和經驗,同時大部分師資也是網易特邀講師,有著豐富的授課經驗David老師復旦大學工程碩士,原Oppo資深研發工程師,網易特邀Android講師,專注技術十年,產品控、代碼控,擁有豐富的項目經驗,主持研發了多個成功上線的大型互聯網項目。熱愛互聯網,熱衷于各種Android底層技術,精通NDK架構和前端開發,擅長移動互聯網高并發、可維護性架構設計,有豐富的實戰經驗。River《Android開發入門與實戰第二版》作者之一,《NFC:Arduino、Android與PhoneGap近場通信》譯者,國內首批Android開發,曾任職于銀聯,華夏幸福等知名公司,擅長項目重構,架構,以及性能優化,擁有多年的項目開發以及管理經驗,原網易特邀Android講師。授課風格幽默風趣,有激情,注重站在學員的角度考慮問題。Zee老師

中南大學計算機信息專業畢業,前新浪架構師,58同城項目負責人。8年Android行業從業經驗,豐富的項目研發以及管理經驗,原網易特邀Android講師,對架構方面有深入的研究。授課激情有活力,能耐心幫助學員解決項目中遇到的問題。David老師QQ:1051917835

Andy華中科技大學計算機相關專業碩士,全棧工程師,精通前端和后端。曾任職于華為,阿里巴巴等知名公司。Android講師,擁有多年的項目開發經驗和管理經驗,注重為學員解決疑難問題,授課邏輯嚴謹而風趣。格言是“授業不只要有廣度,更要有深度師資力量

Damon老師

華中科技大學計算機相關專業碩士,十余年互聯網從業經驗;曾就職于華為,小米,擔任項目經理,技術經理等;

專精領域:精通AndroidFrameWork源碼及性能優化;華為鴻蒙系統架構設計,專注NDK底層設計與開發。

學員疑問我需要掌握哪些基礎,才能開始學習Android高級課程。

怎么構建一套符合自己自身情況的知識體系。

互聯網公

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論