最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

黑馬程序員JVM完整教程,Java虛擬機(jī)快速入門,全程干貨不拖沓

2023-03-10 16:18 作者:rickqaq  | 我要投稿







?
07_棧 P7 - 04:14
?

 


棧幀過多

棧幀過大

?
14_線程診斷_cpu占用高 P14 - 03:47
?



?
17_堆_定義 P17 - 01:13
?
垃圾回收




?
22_方法區(qū)_定義 P22 - 01:08
?

Java虛擬機(jī)有一個(gè)方法區(qū),是所有Java虛擬之間共享機(jī)線程。

方法區(qū)域類似于編譯代碼的存儲區(qū)域

傳統(tǒng)的語言或類似于“文本”段在一個(gè)操作系統(tǒng)

的過程。

它存儲每個(gè)類結(jié)構(gòu)運(yùn)行時(shí)常量池等領(lǐng)域

方法數(shù)據(jù)和方法和構(gòu)造函數(shù)的代碼,包括特別

方法用于類和實(shí)例初始化和接口初始化。

方法區(qū)上創(chuàng)建虛擬機(jī)啟動的方法。

雖然方法區(qū)邏輯上堆的一部分,簡單的實(shí)現(xiàn)可以選擇不垃圾收集或緊湊。

本規(guī)范并不強(qiáng)制的位置的方法

·1.8以前會導(dǎo)致永久代內(nèi)存溢出

·1.8之后會導(dǎo)致元空間內(nèi)存溢出


?
25_方法區(qū)_常量池 P25 - 07:35
?





?
32_StringTable_intern_1.8 P32 - 00:21
?




記住new 都是堆內(nèi)存

永久代回收效率低


直接內(nèi)存! gc不能 unsafe



垃圾回收

GCROOTs





https://blog.csdn.net/linzhiqiang0316/article/details/88591907


https://blog.csdn.net/weixin_43338519/article/details/107836096

參數(shù)配置


并發(fā)標(biāo)記打掃



gc 調(diào)優(yōu)


越大時(shí)間也會越長

初始標(biāo)記:僅僅標(biāo)記GC ROOTS的直接關(guān)聯(lián)對象,并且世界暫停??

并發(fā)標(biāo)記:使用GC ROOTS TRACING算法,進(jìn)行跟蹤標(biāo)記,世界不暫停

重新標(biāo)記,因?yàn)橹安l(fā)標(biāo)記,其他用戶線程不暫停,可能產(chǎn)生了新垃圾,所以重新標(biāo)記,世界暫停??


  • 新生代 GC(Minor GC):指發(fā)生新生代的的垃圾收集動作,Minor GC 非常頻繁,回收速度一般也比較快。
  • 老年代 GC(Major GC/Full GC):指發(fā)生在老年代的 GC,出現(xiàn)了 Major GC 經(jīng)常會伴隨至少一次的 Minor GC(并非絕對),Major GC 的速度一般會比 Minor GC 的慢 10 倍以上。



重新標(biāo)記錢 先清理



?
02-類文件結(jié)構(gòu) P97 - 04:24
?



附加屬性_計(jì)數(shù);




?
14-圖解運(yùn)行流程-準(zhǔn)備 P109 - 02:09
?






字節(jié)碼一樣



靜態(tài)代碼>構(gòu)造方法

父>子


int

?
22-字節(jié)碼指令-init P117 - 02:22
?



?
23-方法調(diào)用 P118 - 03:52
?


編譯類型看左邊 運(yùn)行類型看右邊



?
32-finally-面試題1 P127 - 00:02
?


跟上例中的finally相比,發(fā)現(xiàn)沒有athrow了,這告訴我們:如果在finally中出現(xiàn)了 return, 會吞掉異常,可以試一下下面的代碼!!!



原來就是把要返回的值先保存到局部變量中,返回前再load到棧中返回

return 不受影響



?
34-synchronized P129 - 01:50
?


一開始是new指令在堆上分配了內(nèi)存并向操作數(shù)棧壓入了指向這段內(nèi)存的引用,之后dup指令又備份了一份,那么操作數(shù)棧頂就有兩個(gè),再后是調(diào)用invokespecial #18指令進(jìn)行初始化,此時(shí)會消耗一個(gè)引用作為傳給構(gòu)造器的“this”參數(shù),那么還剩下一個(gè)引用,會被astore_1指令存儲當(dāng)然new之后有時(shí)候會執(zhí)行<init>,這主要依據(jù)字節(jié)碼中是否包含invokespecial指令。下面主要說一下該指令

主要目的:得到對象存在堆中的地址,這樣就可以用當(dāng)前類,父類,父父類,即繼承層的所有對象。??把繼承層的所有對象的數(shù)據(jù)和方法為自己當(dāng)前對象使用。到局部變量表中。


?
36-語法糖-自動拆裝箱 P131 - 00:38
?

編譯器處理

-127 -128 不會new





?
40-語法糖-foreach P135 - 01:43
?

數(shù)組:直接fori

集合:迭代器


?
41-語法糖-switch-string P136 - 05:01
?

兩次switch 防止hash沖突



?
44-語法糖-twr1 P139 - 00:40
?

JDKT開始新增了對需要關(guān)閉的資源處理的特殊語法try-with-resources:




?
48-類加載-加載 P143 - 01:53
?





?
50-類加載-連接-準(zhǔn)備 P145 - 03:32
?


final直接賦值

cinit 靜態(tài)成員變量復(fù)制 初始化階段/




?
51-類加載-連接-解析 P146 - 06:06
?

將常量池中的符號引用解析為直接引用


字符串->地址

?
52-類加載-初始化 P147 - 01:04
?

在類初始化之前的準(zhǔn)備階段,虛擬機(jī)會將類變量(static 修飾的變量)分配內(nèi)存并設(shè)置零值。


在類初始化階段,執(zhí)行類構(gòu)造器 <cinit>() 方法。<cinit> 類初始化方法有如下特點(diǎn):


編譯器會在將 .java 文件編譯成 .class 文件時(shí),收集所有類初始化代碼和 static {} 域的代碼,收集在一起成為 <cinit>() 方法;

子類初始化時(shí)會首先調(diào)用父類的 <cinit>() 方法;

JVM 會保證 <cinit>() 方法的線程安全,保證同一時(shí)間只有一個(gè)線程執(zhí)行;


?
54-類加載-練習(xí)2 P149 - 05:15
?



老師這個(gè)靜態(tài)內(nèi)部類利用的巧妙,調(diào)用Singleton函數(shù),不會觸發(fā)這個(gè)靜態(tài)內(nèi)部類的初始化,也就是不會創(chuàng)建這個(gè)單例對象



啟動類加載路徑

默認(rèn)是使用本來的加載器加載依賴類的

由于JDBC在核心類庫中,它由啟動類加載器加載,由于驅(qū)動是在他的類初始化方法中加載的

于是要顯示的調(diào)用Classd的forName方法使用一個(gè)能加載驅(qū)動的加載器加載驅(qū)動


1、我來總結(jié)下,在jre/lib包下有一個(gè)DriverManager,是啟動類加載的,但是jdbc的驅(qū)動是各個(gè)廠商來實(shí)現(xiàn)的不在啟動類加載路徑下,啟動類無法加載,而驅(qū)動管理需要用到這些驅(qū)動


1、SPI機(jī)制能夠使接口與具體的實(shí)現(xiàn)類解耦, 可以根據(jù)實(shí)際的

業(yè)務(wù)情況啟用或替換具體組件。

2、SPI機(jī)制為很多框架的擴(kuò)展提供了可能。

3、SPI機(jī)制更多的是一種思想


3、過程就是:啟動類加載器加載DriverManager,DriverManager代碼里調(diào)用了線程上下文類加載器,這個(gè)加載器默認(rèn)就是使用應(yīng)用程序類加載器加載類,通過應(yīng)用程序類加載器加載jdbc驅(qū)動

?
64-運(yùn)行期優(yōu)化-逃逸分析 P159 - 07:31
?



jmm

?
04-JMM-原子性-問題 P168 - 05:33
?




?
05-JMM-可見性-問題 P169 - 00:56
?

synchronized語句塊既可以保證代碼塊的原子性,也同時(shí)保證代碼塊內(nèi)變量的可見性。但缺點(diǎn)是

synchronized是屬于重量級操作,性能相對更低

?
09-JMM-有序性-理解 P173 - 04:42
?


對iNSTANCE使用volatile修飾即可,可以禁用指令重排,但要注意在DK5以上的版本的volatile才會真正有效



?
11-CAS-概述 P175 - 00:43
?

CAS即Compare and Swap.,它體現(xiàn)的一種樂觀鎖的思想 與 volatile(易變的)


?
13-CAS-原子類 P177 - 00:06
?

樂觀鎖與悲觀鎖

CAS是基于樂觀鎖的思想:最樂觀的估計(jì),不怕別的線程來修改共享變量,就算改了也設(shè)關(guān)系,我吃虧點(diǎn)再重試唄。

synchronized是基于悲觀鎖的思想:最悲觀的估計(jì),得防著其它線程來修改共享變量,我上了鎖你們都別想改,我改完了解開鎖,你們才有機(jī)會。

juc (java.util.concurent)中提供了原子操作類,可以提供線程安全的操作,例如:AtomicInteger、AtomicBoolean等,它們底層就是采用CAS技術(shù)+volatile來實(shí)現(xiàn)的。


?
16-synchronized-輕量級鎖-無競爭 P180 - 01:37
?

?
17-synchronized-輕量級鎖-鎖膨脹 P181 - 03:44
?


重量級鎖沒事,解鎖就是



?
18-synchronized-重量級鎖-自旋 P182 - 00:37
?

自旋成功

自旋失敗會放棄



?
19-synchronized-偏向鎖 P183 - 01:22
?


黑馬程序員JVM完整教程,Java虛擬機(jī)快速入門,全程干貨不拖沓的評論 (共 條)

分享到微博請遵守國家法律
吉林省| 许昌县| 客服| 怀柔区| 宁安市| 宁晋县| 多伦县| 黄龙县| 武隆县| 湾仔区| 报价| 福泉市| 岚皋县| 精河县| 巫山县| 莎车县| 惠水县| 富锦市| 铜山县| 绥中县| 滨州市| 北安市| 林西县| 无锡市| 体育| 贡嘎县| 苏尼特右旗| 抚顺县| 化州市| 炎陵县| 银川市| 五常市| 华容县| 墨玉县| 乌苏市| 沭阳县| 嘉鱼县| 耒阳市| 都江堰市| 永新县| 沭阳县|