vip01 - david線程執(zhí)行原理課件_第1頁(yè)
vip01 - david線程執(zhí)行原理課件_第2頁(yè)
vip01 - david線程執(zhí)行原理課件_第3頁(yè)
vip01 - david線程執(zhí)行原理課件_第4頁(yè)
vip01 - david線程執(zhí)行原理課件_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Android高級(jí)開(kāi)發(fā)試聽(tīng)課碼牛學(xué)院-用代碼碼出精彩的人生David老師復(fù)旦大學(xué)工程碩士,原Oppo資深研發(fā)工程師,網(wǎng)易特邀Android講師,

River老師《Android開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)第二版》作者之一Zee老師

中南大學(xué)計(jì)算機(jī)信息專業(yè)畢業(yè),前新浪架構(gòu)師,58同城項(xiàng)目負(fù)責(zé)人David老師QQ:1051917835

Andy老師華中科技大學(xué)計(jì)算機(jī)相關(guān)專業(yè)碩士,騰訊架構(gòu)師

講師介紹

Damon老師

前三星研發(fā)高級(jí)工程師Thread線程源碼解析從Android虛擬機(jī)層看java線程執(zhí)行原理1Java線程執(zhí)行,是jvm線程還是linux線程2線程棧執(zhí)行原理與java對(duì)象設(shè)計(jì)思想3線程池與線程機(jī)制4深入linux內(nèi)核發(fā)現(xiàn)java線程真相20:05開(kāi)始開(kāi)車(chē)視頻資料加叮當(dāng)老師微信技術(shù)點(diǎn):David老師復(fù)旦大學(xué)工程碩士,原Oppo資深研發(fā)工程師,網(wǎng)易特邀Android講師,

River老師《Android開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)第二版》作者之一Zee老師

中南大學(xué)計(jì)算機(jī)信息專業(yè)畢業(yè),前新浪架構(gòu)師,58同城項(xiàng)目負(fù)責(zé)人David老師QQ:1051917835

Andy老師華中科技大學(xué)計(jì)算機(jī)相關(guān)專業(yè)碩士,騰訊架構(gòu)師

講師介紹

Damon老師

前三星研發(fā)高級(jí)工程師為什么要學(xué)習(xí)java線程有利于解決并發(fā)問(wèn)題:定義

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

試圖通過(guò)它來(lái)提高系統(tǒng)內(nèi)程序并發(fā)執(zhí)行的程序,從而進(jìn)一步提高系統(tǒng)的吞吐量.后來(lái)多處理機(jī)系統(tǒng)得到迅速發(fā)展

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

線程一個(gè)車(chē)間里,可以有很多工人。他們協(xié)同完成一個(gè)任務(wù)。

AndroidFramework02

系統(tǒng)內(nèi)核層關(guān)于內(nèi)存詳解課程小結(jié)用戶點(diǎn)擊應(yīng)用圖標(biāo)ActivityThreadMain函數(shù)App進(jìn)程Android內(nèi)核層內(nèi)存分布各個(gè)區(qū)域詳解方法區(qū):方法區(qū)存放了類的信息(class字節(jié)碼的信息),靜態(tài)變量、處理邏輯的指令集

方法區(qū)的數(shù)據(jù)主內(nèi)存堆區(qū):用來(lái)存儲(chǔ)對(duì)象實(shí)例,被所有線程共享的一塊內(nèi)存區(qū)域,在App啟動(dòng)時(shí)創(chuàng)建,

堆區(qū)的數(shù)據(jù)放在主內(nèi)存

虛擬機(jī)棧區(qū):存儲(chǔ)方法的局部變量,每次開(kāi)啟一個(gè)線程都會(huì)創(chuàng)建一個(gè)虛擬機(jī)棧,線程私有,生命周期與線程相同棧區(qū)的數(shù)據(jù)高速緩沖區(qū)執(zhí)行引擎:將方法區(qū)中對(duì)應(yīng)方法的arm指令集加載到棧區(qū),而棧區(qū)存在于高速緩沖區(qū)中,cpu是直接從高速緩沖區(qū)取arm指令,一條一條執(zhí)行。執(zhí)行引擎就像一個(gè)中介,方法對(duì)應(yīng)的arm指令相當(dāng)于交易的物品內(nèi)存原理高速緩沖區(qū)2核4核3核1核Singletonsingleton;高速緩沖區(qū)高速緩沖區(qū):

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

在linux系統(tǒng)這些區(qū)域本身都不存在,

如果我們不設(shè)立方法區(qū)和堆區(qū),可以想象下下面兩種場(chǎng)景:1如果沒(méi)有方法區(qū),每次創(chuàng)建對(duì)象需要從磁盤(pán)加載字節(jié)碼,然后new出來(lái)性能是多么低下2如果沒(méi)有堆區(qū),每次創(chuàng)建都需要加載一個(gè)對(duì)象,并且攜帶對(duì)應(yīng)的class,將會(huì)需要多少內(nèi)存虛擬機(jī)給App的內(nèi)存我們?cè)撛趺蠢斫饽?Android虛擬機(jī)在linux中的申請(qǐng)內(nèi)存可以理解為一次性malloc了一大塊的內(nèi)存,而內(nèi)存中就有方法區(qū)和堆區(qū)

開(kāi)啟一個(gè)App代表虛擬機(jī)malloc一次內(nèi)存比如50M,如果運(yùn)行了10個(gè)App,那就是500M。虛擬機(jī)占Linux的內(nèi)存有500M

然后由虛擬機(jī)自己管理內(nèi)部對(duì)象的分配.由于回收需要知道對(duì)象占多大空間,

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

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

Java對(duì)象模型:OOP-Klass模型先簡(jiǎn)單地介紹一下Android中實(shí)現(xiàn)的Java的對(duì)象模型機(jī)制。在JVM中,并沒(méi)有直接將Java對(duì)象映射成C++對(duì)象,而是采用了oop-klass模型,主要是不希望每個(gè)對(duì)象中都包含有一份Class類型OOP(OrdinaryObjectPoint)表示對(duì)象的實(shí)例信息Klass,是Java類的在C++中的表示,用來(lái)描述Java類的信息Java對(duì)象模型:OOP-Klass模型簡(jiǎn)單地說(shuō),一個(gè)Java類在JVM中被拆分為了兩個(gè)部分:數(shù)據(jù)和描述信息,分別對(duì)應(yīng)OOP和KlassOOP表示java對(duì)象應(yīng)該承載的數(shù)據(jù)

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

簡(jiǎn)歷一定要吸引,把最好的兩個(gè)項(xiàng)目經(jīng)驗(yàn)放在最前面?zhèn)鋺?zhàn)簡(jiǎn)歷:

簡(jiǎn)歷里面的技術(shù)寫(xiě)自己最熟悉和擅長(zhǎng)的,每個(gè)技術(shù)準(zhǔn)備對(duì)應(yīng)的連環(huán)炮深挖底層:

底層技術(shù)一時(shí)半會(huì)學(xué)不懂,找到高頻點(diǎn),如虛擬機(jī)原理,區(qū)別,準(zhǔn)備5個(gè)左右吃鬧架構(gòu):

架構(gòu)一定要好好看,比如Glide,Okhttp,MVVM,MVP架構(gòu)實(shí)現(xiàn)一定要掌握掌握源碼:

簡(jiǎn)一定要了解FrameWork層源碼,如AMS,PMS,Handler,屬性動(dòng)畫(huà)如何快速學(xué)習(xí)提升自學(xué)要找學(xué)習(xí)資料,網(wǎng)上資料不準(zhǔn)確,官方文檔無(wú)人總結(jié)

碰到問(wèn)題耗很久,很難找人幫忙指點(diǎn)、解答

太耗時(shí)、太低效

沒(méi)有實(shí)際的項(xiàng)目可以實(shí)踐,學(xué)了感覺(jué)沒(méi)用

學(xué)不全面、學(xué)不系統(tǒng)太難、太苦逼了、堅(jiān)持不下去但是,現(xiàn)在你不需要這么苦逼了?。?!

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

中南大學(xué)計(jì)算機(jī)信息專業(yè)畢業(yè),前新浪架構(gòu)師,58同城項(xiàng)目負(fù)責(zé)人。8年Android行業(yè)從業(yè)經(jīng)驗(yàn),豐富的項(xiàng)目研發(fā)以及管理經(jīng)驗(yàn),原網(wǎng)易特邀Android講師,對(duì)架構(gòu)方面有深入的研究。授課激情有活力,能耐心幫助學(xué)員解決項(xiàng)目中遇到的問(wèn)題。David老師QQ:1051917835

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

Damon老師

華中科技大學(xué)計(jì)算機(jī)相關(guān)專業(yè)碩士,十余年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn);曾就職于華為,小米,擔(dān)任項(xiàng)目經(jīng)理,技術(shù)經(jīng)理等;

專精領(lǐng)域:精通AndroidFrameWork源碼及性能優(yōu)化;華為鴻蒙系統(tǒng)架構(gòu)設(shè)計(jì),專注NDK底層設(shè)計(jì)與開(kāi)發(fā)。

學(xué)員疑問(wèn)我需要掌握哪些基礎(chǔ),才能開(kāi)始學(xué)習(xí)Android高級(jí)課程。

怎么構(gòu)建一套符合自己自身情況的知識(shí)體系。

互聯(lián)網(wǎng)公

溫馨提示

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

評(píng)論

0/150

提交評(píng)論