訂閱
糾錯(cuò)
加入自媒體

【技術(shù)干貨】Java小知識

Java作為大數(shù)據(jù)技術(shù)的必備基礎(chǔ)編程語言,是想要轉(zhuǎn)行學(xué)習(xí)大數(shù)據(jù)的小伙伴必須要熟練掌握的一項(xiàng)技術(shù)。今天科妹就為大家?guī)砹薐ava里的小知識點(diǎn)講解。

1.類加載子系統(tǒng)的作用:根據(jù)給定的全限定名類名(如java.lang.Object)來裝載class文件的內(nèi)容到運(yùn)行時(shí)數(shù)據(jù)區(qū)中的方法區(qū)

2.雙親委派機(jī)制:當(dāng)一個(gè)類收到了類加載請求時(shí),不會自己先去加載這個(gè)類,而是將其委派給父類,由父類去加載,如果此時(shí)父類不能加載,反饋給子類,由子類去完成類的加載。

3.類加載過程:加載、鏈接(驗(yàn)證準(zhǔn)備、解析)、初始化

加載階段,虛擬機(jī)需要完成以下3件事情:

1)通過一個(gè)類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流(并沒有指明要從一個(gè)Class文件中獲取,可以從其他渠道,譬如:網(wǎng)絡(luò)、動態(tài)生成、數(shù)據(jù)庫等)。

2)將這個(gè)字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。

3)在內(nèi)存中生成一個(gè)代表這個(gè)類的java.lang.Class對象,作為方法區(qū)這個(gè)類的各種數(shù)據(jù)的訪問入口。

驗(yàn)證階段大致會完成4個(gè)階段的檢驗(yàn)動作:

1)文件格式驗(yàn)證

2)元數(shù)據(jù)驗(yàn)證

3)字節(jié)碼驗(yàn)證

4)符號引用驗(yàn)證

準(zhǔn)備階段是正式為類變量分配內(nèi)存并設(shè)置類變量初始值的階段,這些變量所使用的內(nèi)存都將在方法區(qū)中進(jìn)行分配。

解析階段是虛擬機(jī)將常量池內(nèi)的符號引用替換為直接引用的過程。

初始化階段,則根據(jù)程序猿通過程序制定的主觀計(jì)劃去初始化類變量和其他資源,或者說:初始化階段是執(zhí)行類構(gòu)造器()方法的過程。

棧的內(nèi)存要遠(yuǎn)遠(yuǎn)小于堆內(nèi)存
-Xss選項(xiàng)設(shè)置棧內(nèi)存的大小。
-Xms選項(xiàng)可以設(shè)置堆的開始時(shí)的大小,-Xmx選項(xiàng)可以設(shè)置堆的最大值。

在Java中,每一個(gè)對象都擁有一個(gè)鎖標(biāo)記(鎖),也稱為監(jiān)視器,多線程同時(shí)訪問某個(gè)對象時(shí),線程只有獲取了該對象的鎖才能訪問。

Lock和synchronized有以下幾點(diǎn)不同

1)Lock是一個(gè)接口,而synchronized是Java中的關(guān)鍵字,synchronized是內(nèi)置的語言實(shí)現(xiàn);

2)采用synchronized不需要用戶去手動釋放鎖,當(dāng)synchronized方法或者synchronized代碼塊執(zhí)行完后,系統(tǒng)會自動讓線程釋放對鎖的占用;synchronized在發(fā)生異常時(shí),會自動釋放線程占有的鎖,因此不會導(dǎo)致死鎖現(xiàn)象發(fā)生;而Lock在發(fā)生異常時(shí),如果沒有主動通過unLock()去釋放鎖,則很可能造成死鎖現(xiàn)象,因此使用Lock時(shí)需要在finally塊中釋放鎖;

3)響應(yīng)中斷Lock可以讓等待鎖的線程響應(yīng)中斷,而synchronized卻不行,使用synchronized時(shí),等待的線程會一直等待下去,不能夠響應(yīng)中斷;

4)Lock可以是否獲取鎖,synchronized不行。

5)Lock可以提高多個(gè)線程進(jìn)行讀操作的效率。

6) 公平鎖Lock可以設(shè)置為公平鎖,synchronized就是非公平鎖

單獨(dú)調(diào)用interrupt()方法不能中斷正在運(yùn)行過程中的線程,只能中斷阻塞過程中的線程。

當(dāng)通過lockInterruptibly()方法獲取某個(gè)鎖時(shí),如果不能獲取到,只有進(jìn)行等待的情況下,是可以響應(yīng)中斷的(線程B調(diào)用threadB.interrupt()方法能夠中斷線程B的等待過程)。

而用synchronized修飾的話,當(dāng)一個(gè)線程處于等待某個(gè)鎖的狀態(tài),是無法被中斷的,只有一直等待下去。

Java作為大數(shù)據(jù)技術(shù)的重要基礎(chǔ)語言,大家一定要牢牢掌握住它的知識點(diǎn),為自己的將來打好基礎(chǔ)。

更多大數(shù)據(jù)相關(guān)資訊,歡迎關(guān)注成都科多大數(shù)據(jù)微信公眾號。

聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號