Java崗位面試考點(diǎn)精講(基礎(chǔ)篇02期)砰琢,看完沒(méi)收獲請(qǐng)來(lái)找我蘸嘶!

1. 兩個(gè)對(duì)象的hashCode相同,則equals也一定為true陪汽,對(duì)嗎训唱?

不對(duì),答案見(jiàn)下面的代碼:

@Override

public int hashCode() {

return 1;

}

兩個(gè)對(duì)象equals為true挚冤,則hashCode也一定相同况增,對(duì)嗎?

這塊肯定是有爭(zhēng)議的训挡。面試的時(shí)候這樣答:如果按照官方設(shè)計(jì)要求來(lái)打代碼的話澳骤,hashcode一定相等。但是如果不按官方照設(shè)計(jì)要求澜薄、不重寫hashcode方法为肮,就會(huì)出現(xiàn)不相等的情況。

2. java線程池用過(guò)沒(méi)有表悬?

Executors提供了四種方法來(lái)創(chuàng)建線程池弥锄。

newFixedThreadPool() :創(chuàng)建固定大小的線程池。

newCachedThreadPool(): 創(chuàng)建無(wú)限大小的線程池蟆沫,線程池中線程數(shù)量不固定籽暇,可根據(jù)需求自動(dòng)更改。

newSingleThreadPool() : 創(chuàng)建單個(gè)線程池饭庞,線程池中只有一個(gè)線程戒悠。

newScheduledThreadPool() 創(chuàng)建固定大小的線程池,可以延遲或定時(shí)的執(zhí)行任務(wù)舟山。

手寫一個(gè):

public static void main(String[] args) {

ExecutorService threadPool = Executors.newCachedThreadPool();

threadPool.execute(() -> {

for (int i = 0; i< 20;i++) {

System.out.println(Thread.currentThread().getName()+":"+i);

}

});

threadPool.shutdown();

}

線程池作用

限制線程個(gè)數(shù)绸狐,避免線程過(guò)多導(dǎo)致系統(tǒng)運(yùn)行緩慢或崩潰。

不需要頻繁的創(chuàng)建和銷毀累盗,節(jié)約資源寒矿、響應(yīng)更快。

3. Math.round(-2.5)等于多少若债?

不要認(rèn)為它是四舍五入!不要認(rèn)為它是四舍五入!不要認(rèn)為它是四舍五入!

口訣:+0.5后向下取整符相。所以結(jié)果是-2。

留個(gè)題,Math.round(-2.6)結(jié)果和Math.round(2.6)結(jié)果

4. 面向?qū)ο罅笤瓌t

單一職責(zé)原則——SRP

讓每個(gè)類只專心處理自己的方法啊终。

開(kāi)閉原則——OCP

軟件中的對(duì)象(類镜豹,模塊,函數(shù)等)應(yīng)該對(duì)于擴(kuò)展是開(kāi)放的蓝牲,但是對(duì)于修改是關(guān)閉的趟脂。

里式替換原則——LSP

子類可以去擴(kuò)展父類,但是不能改變父類原有的功能例衍。

依賴倒置原則——DIP

應(yīng)該通過(guò)調(diào)用接口或抽象類(比較高層)昔期,而不是調(diào)用實(shí)現(xiàn)類(細(xì)節(jié))。

接口隔離原則——ISP

把接口分成滿足依賴關(guān)系的最小接口肄渗,實(shí)現(xiàn)類中不能有不需要的方法镇眷。

迪米特原則——LOD

高內(nèi)聚,低耦合。

5. static和final區(qū)別

6. String s = "hello"和String s = new String("hello");區(qū)別

String s = new String("hello");可能創(chuàng)建兩個(gè)對(duì)象也可能創(chuàng)建一個(gè)對(duì)象翎嫡。如果常量池中有hello字符串常量的話欠动,則僅僅在堆中創(chuàng)建一個(gè)對(duì)象。如果常量池中沒(méi)有hello對(duì)象惑申,則堆上和常量池都需要?jiǎng)?chuàng)建具伍。

String s = "hello"這樣創(chuàng)建的對(duì)象,JVM會(huì)直接檢查字符串常量池是否已有"hello"字符串對(duì)象圈驼,如沒(méi)有人芽,就分配一個(gè)內(nèi)存存放"hello",如有了绩脆,則直接將字符串常量池中的地址返回給棧萤厅。(沒(méi)有new,沒(méi)有堆的操作)

7. 引用類型是占用幾個(gè)字節(jié)靴迫?

hotspot在64位平臺(tái)上惕味,占8個(gè)字節(jié),在32位平臺(tái)上占4個(gè)字節(jié)玉锌。

8. `(1<3)?"a":"b")+3+4`和`(1<3)?"a":"b")+(3+4)`區(qū)別

System.out.println(((1<3)?"a":"b")+3+4);

System.out.println(((1<3)?"a":"b")+(3+4));

控制臺(tái):

a34

a7

8.1 什么情況下,加號(hào)會(huì)變成字符串連接符

依據(jù)上面的例子來(lái)思考名挥。

9. java中的switch選擇結(jié)構(gòu)可以使用數(shù)據(jù)類型的數(shù)據(jù)(JDK1.8)

char

byte

short

int

Character

Byte

Short

Integer

String

enum

更好的記憶方法:

基本類型中,沒(méi)有boolean和浮點(diǎn)類型+長(zhǎng)類型long.相應(yīng)的包裝類型也沒(méi)有主守。

外加String和enum禀倔。

10. `4&5``4^5``4&10>>1`各等于多少

// 0100 & 0101 = 0100 = 4

System.out.println(4&5);

// 0100 ^ 0101 = 0001 = 1

System.out.println(4^5);

System.out.println(10>>1);

// 有疑問(wèn)參考下面的運(yùn)算符優(yōu)先級(jí)

System.out.println(4&10>>1);

4

1

5

4

`4|5`等于多少呢

答案:5

運(yùn)算符優(yōu)先級(jí)

11. 某些java類為什么要實(shí)現(xiàn)Serializable接口

為了網(wǎng)絡(luò)進(jìn)行傳輸或者持久化

什么是序列化

將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程

除了實(shí)現(xiàn)Serializable接口還有什么序列化方式

Json序列化

FastJson序列化

ProtoBuff序列化

12. JVM垃圾處理方法

標(biāo)記-清除算法(老年代)

該算法分為“標(biāo)記”和“清除”兩個(gè)階段: 首先標(biāo)記出所有需要回收的對(duì)象(可達(dá)性分析), 在標(biāo)記完成后統(tǒng)一清理掉所有被標(biāo)記的對(duì)象.

該算法會(huì)有兩個(gè)問(wèn)題:

效率問(wèn)題厅须,標(biāo)記和清除效率不高弹砚。

空間問(wèn)題: 標(biāo)記清除后會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片, 空間碎片太多可能會(huì)導(dǎo)致在運(yùn)行過(guò)程中需要分配較大對(duì)象時(shí)無(wú)法找到足夠的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集。

所以它一般用于"垃圾不太多的區(qū)域晾咪,比如老年代"涎才。

復(fù)制算法(新生代)

該算法的核心是將可用內(nèi)存按容量劃分為大小相等的兩塊, 每次只用其中一塊, 當(dāng)這一塊的內(nèi)存用完, 就將還存活的對(duì)象(非垃圾)復(fù)制到另外一塊上面, 然后把已使用過(guò)的內(nèi)存空間一次清理掉鞋既。

優(yōu)點(diǎn):不用考慮碎片問(wèn)題,方法簡(jiǎn)單高效。

缺點(diǎn):內(nèi)存浪費(fèi)嚴(yán)重涛救。

現(xiàn)代商用VM的新生代均采用復(fù)制算法,但由于新生代中的98%的對(duì)象都是生存周期極短的业扒,因此并不需完全按照1∶1的比例劃分新生代空間检吆,而是將新生代劃分為一塊較大的Eden區(qū)和兩塊較小的Survivor區(qū)(HotSpot默認(rèn)Eden和Survivor的大小比例為8∶1), 每次只用Eden和其中一塊Survivor。

當(dāng)發(fā)生MinorGC時(shí)程储,將Eden和Survivor中還存活著的對(duì)象一次性地拷貝到另外一塊Survivor上蹭沛, 最后清理掉Eden和剛才用過(guò)的Survivor的空間。當(dāng)Survivor空間不夠用(不足以保存尚存活的對(duì)象)時(shí)章鲤,需要依賴?yán)夏甏M(jìn)行空間分配擔(dān)保機(jī)制摊灭,這部分內(nèi)存直接進(jìn)入老年代。

復(fù)制算法的空間分配擔(dān)保:

在執(zhí)行Minor GC前, VM會(huì)首先檢查老年代是否有足夠的空間存放新生代尚存活對(duì)象, 由于新生代使用復(fù)制收集算法, 為了提升內(nèi)存利用率, 只使用了其中一個(gè)Survivor作為輪換備份, 因此當(dāng)出現(xiàn)大量對(duì)象在Minor GC后仍然存活的情況時(shí), 就需要老年代進(jìn)行分配擔(dān)保, 讓Survivor無(wú)法容納的對(duì)象直接進(jìn)入老年代, 但前提是老年代需要有足夠的空間容納這些存活對(duì)象.

但存活對(duì)象的大小在實(shí)際完成GC前是無(wú)法明確知道的, 因此Minor GC前, VM會(huì)先首先檢查老年代連續(xù)空間是否大于新生代對(duì)象總大小或歷次晉升的平均大小, 如果條件成立, 則進(jìn)行Minor GC, 否則進(jìn)行Full GC(讓老年代騰出更多空間).

然而取歷次晉升的對(duì)象的平均大小也是有一定風(fēng)險(xiǎn)的, 如果某次Minor GC存活后的對(duì)象突增,遠(yuǎn)遠(yuǎn)高于平均值的話,依然可能導(dǎo)致?lián)J?Handle Promotion Failure, 老年代也無(wú)法存放這些對(duì)象了), 此時(shí)就只好在失敗后重新發(fā)起一次Full GC(讓老年代騰出更多空間).

標(biāo)記-整理算法(老年代)

標(biāo)記清除算法會(huì)產(chǎn)生內(nèi)存碎片問(wèn)題, 而復(fù)制算法需要有額外的內(nèi)存擔(dān)卑芑玻空間, 于是針對(duì)老年代的特點(diǎn), 又有了標(biāo)記整理算法. 標(biāo)記整理算法的標(biāo)記過(guò)程與標(biāo)記清除算法相同, 但后續(xù)步驟不再對(duì)可回收對(duì)象直接清理, 而是讓所有存活的對(duì)象都向一端移動(dòng),然后清理掉端邊界以外的內(nèi)存.

13. 新生代帚呼、老年代、持久代都存儲(chǔ)哪些東西

新生代:

方法中new一個(gè)對(duì)象皱蹦,就會(huì)先進(jìn)入新生代煤杀。

老年代:

新生代中經(jīng)歷了N次垃圾回收仍然存活的對(duì)象就會(huì)被放到老年代中。

大對(duì)象一般直接放入老年代沪哺。

當(dāng)Survivor空間不足沈自。需要老年代擔(dān)保一些空間,也會(huì)將對(duì)象放入老年代辜妓。

永久代:

指的就是方法區(qū)枯途。

14. 可達(dá)性算法中,哪些對(duì)象可作為GC Roots對(duì)象籍滴。

虛擬機(jī)棧中引用的對(duì)象

方法區(qū)靜態(tài)成員引用的對(duì)象

方法區(qū)常量引用對(duì)象

本地方法棧JNI引用的對(duì)象

15. 什么時(shí)候進(jìn)行MinGC和FullGC

MinGC:

當(dāng)Eden區(qū)滿時(shí),觸發(fā)Minor GC.

FullGC:

調(diào)用System.gc時(shí)酪夷,系統(tǒng)建議執(zhí)行Full GC,但是不必然執(zhí)行

老年代空間不足

方法區(qū)空間不足

通過(guò)Minor GC后進(jìn)入老年代的平均大小大于老年代的剩余空間

堆中分配很大的對(duì)象异逐,而老年代沒(méi)有足夠的空間

16. 如何判定對(duì)象為垃圾對(duì)象

在堆里面存放著Java世界中幾乎所有的對(duì)象實(shí)例, 垃圾收集器在對(duì)堆進(jìn)行回收前, 第一件事就是判斷哪些對(duì)象已死(可回收).

引用計(jì)數(shù)法

在JDK1.2之前捶索,使用的是引用計(jì)數(shù)器算法。

在對(duì)象中添加一個(gè)引用計(jì)數(shù)器灰瞻,當(dāng)有地方引用這個(gè)對(duì)象的時(shí)候腥例,引用計(jì)數(shù)器的值就+1,當(dāng)引用失效的時(shí)候酝润,計(jì)數(shù)器的值就-1燎竖,當(dāng)引用計(jì)數(shù)器被減為零的時(shí)候,標(biāo)志著這個(gè)對(duì)象已經(jīng)沒(méi)有引用了要销,可以回收了构回!

問(wèn)題:如果在A類中調(diào)用B類的方法,B類中調(diào)用A類的方法,這樣當(dāng)其他所有的引用都消失了之后纤掸,A和B還有一個(gè)相互的引用脐供,也就是說(shuō)兩個(gè)對(duì)象的引用計(jì)數(shù)器各為1,而實(shí)際上這兩個(gè)對(duì)象都已經(jīng)沒(méi)有額外的引用借跪,已經(jīng)是垃圾了政己。但是該算法并不會(huì)計(jì)算出該類型的垃圾。

可達(dá)性分析法

在主流商用語(yǔ)言(如Java掏愁、C#)的主流實(shí)現(xiàn)中, 都是通過(guò)可達(dá)性分析算法來(lái)判定對(duì)象是否存活的: 通過(guò)一系列的稱為 GC Roots 的對(duì)象作為起點(diǎn), 然后向下搜索; 搜索所走過(guò)的路徑稱為引用鏈/Reference Chain, 當(dāng)一個(gè)對(duì)象到 GC Roots 沒(méi)有任何引用鏈相連時(shí), 即該對(duì)象不可達(dá), 也就說(shuō)明此對(duì)象是不可用的, 如下圖:雖然E和F相互關(guān)聯(lián)歇由, 但它們到GC Roots是不可達(dá)的, 因此也會(huì)被判定為可回收的對(duì)象。

注:?即使在可達(dá)性分析算法中不可達(dá)的對(duì)象, VM也并不是馬上對(duì)其回收, 因?yàn)橐嬲嬉粋€(gè)對(duì)象死亡, 至少要經(jīng)歷兩次標(biāo)記過(guò)程: 第一次是在可達(dá)性分析后發(fā)現(xiàn)沒(méi)有與GC Roots相連接的引用鏈, 第二次是GC對(duì)在F-Queue執(zhí)行隊(duì)列中的對(duì)象進(jìn)行的小規(guī)模標(biāo)記(對(duì)象需要覆蓋finalize()方法且沒(méi)被調(diào)用過(guò)).

17. 你能說(shuō)出來(lái)幾個(gè)垃圾收集器

Serial

Serial收集器是Hotspot運(yùn)行在Client模式下的默認(rèn)新生代收集器, 它在進(jìn)行垃圾收集時(shí)果港,會(huì)暫停所有的工作進(jìn)程沦泌,用一個(gè)線程去完成GC工作

特點(diǎn):簡(jiǎn)單高效,適合jvm管理內(nèi)存不大的情況(十兆到百兆)辛掠。

Parnew

ParNew收集器其實(shí)是Serial的多線程版本谢谦,回收策略完全一樣,但是他們又有著不同公浪。

我們說(shuō)了Parnew是多線程gc收集他宛,所以它配合多核心的cpu效果更好,如果是一個(gè)cpu欠气,他倆效果就差不多厅各。(可用-XX:ParallelGCThreads參數(shù)控制GC線程數(shù))

Cms

CMS(Concurrent Mark Sweep)收集器是一款具有劃時(shí)代意義的收集器, 一款真正意義上的并發(fā)收集器, 雖然現(xiàn)在已經(jīng)有了理論意義上表現(xiàn)更好的G1收集器, 但現(xiàn)在主流互聯(lián)網(wǎng)企業(yè)線上選用的仍是CMS(如Taobao),又稱多并發(fā)低暫停的收集器。

由他的英文組成可以看出预柒,它是基于標(biāo)記-清除算法實(shí)現(xiàn)的队塘。整個(gè)過(guò)程分4個(gè)步驟:

初始標(biāo)記(CMS initial mark):僅只標(biāo)記一下GC Roots能直接關(guān)聯(lián)到的對(duì)象, 速度很快

并發(fā)標(biāo)記(CMS concurrent mark: GC Roots Tracing過(guò)程)

重新標(biāo)記(CMS remark):修正并發(fā)標(biāo)記期間因用戶程序繼續(xù)運(yùn)行而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分對(duì)象的標(biāo)記記錄

并發(fā)清除(CMS concurrent sweep: 已死對(duì)象將會(huì)就地釋放)

可以看到,初始標(biāo)記宜鸯、重新標(biāo)記需要STW(stop the world 即:掛起用戶線程)操作憔古。因?yàn)樽詈臅r(shí)的操作是并發(fā)標(biāo)記和并發(fā)清除。所以總體上我們認(rèn)為CMS的GC與用戶線程是并發(fā)運(yùn)行的淋袖。

優(yōu)點(diǎn):并發(fā)收集鸿市、低停頓

缺點(diǎn):

CMS默認(rèn)啟動(dòng)的回收線程數(shù)=(CPU數(shù)目+3)*4

當(dāng)CPU數(shù)>4時(shí), GC線程最多占用不超過(guò)25%的CPU資源, 但是當(dāng)CPU數(shù)<=4時(shí), GC線程可能就會(huì)過(guò)多的占用用戶CPU資源, 從而導(dǎo)致應(yīng)用程序變慢, 總吞吐量降低.

無(wú)法清除浮動(dòng)垃圾(GC運(yùn)行到并發(fā)清除階段時(shí)用戶線程產(chǎn)生的垃圾),因?yàn)橛脩艟€程是需要內(nèi)存的即碗,如果浮動(dòng)垃圾施放不及時(shí)焰情,很可能就造成內(nèi)存溢出,所以CMS不能像別的垃圾收集器那樣等老年代幾乎滿了才觸發(fā)剥懒,CMS提供了參數(shù)-XX:CMSInitiatingOccupancyFraction來(lái)設(shè)置GC觸發(fā)百分比(1.6后默認(rèn)92%),當(dāng)然我們還得設(shè)置啟用該策略-XX:+UseCMSInitiatingOccupancyOnly

因?yàn)镃MS采用標(biāo)記-清除算法内舟,所以可能會(huì)帶來(lái)很多的碎片,如果碎片太多沒(méi)有清理初橘,jvm會(huì)因?yàn)闊o(wú)法分配大對(duì)象內(nèi)存而觸發(fā)GC验游,因此CMS提供了-XX:+UseCMSCompactAtFullCollection參數(shù)充岛,它會(huì)在GC執(zhí)行完后接著進(jìn)行碎片整理,但是又會(huì)有個(gè)問(wèn)題耕蝉,碎片整理不能并發(fā)崔梗,所以必須單線程去處理,所以如果每次GC完都整理用戶線程stop的時(shí)間累積會(huì)很長(zhǎng)垒在,所以XX:CMSFullGCsBeforeCompaction參數(shù)設(shè)置隔幾次GC進(jìn)行一次碎片整理(默認(rèn)為0)炒俱。

G1

同優(yōu)秀的CMS垃圾回收器一樣,G1也是關(guān)注最小時(shí)延的垃圾回收器爪膊,也同樣適合大尺寸堆內(nèi)存的垃圾收集,官方也推薦使用G1來(lái)代替選擇CMS砸王。G1最大的特點(diǎn)是引入分區(qū)的思路推盛,弱化分代的概念,合理利用垃圾收集各個(gè)周期的資源谦铃,解決了其他收集器甚至CMS的眾多缺陷耘成。

因?yàn)槊總€(gè)區(qū)都有E、S驹闰、O代瘪菌,所以在G1中,不需要對(duì)整個(gè)Eden等代進(jìn)行回收嘹朗,而是尋找可回收對(duì)象比較多的區(qū)师妙,然后進(jìn)行回收(雖然也需要STW操作,但是花費(fèi)的時(shí)間是很少的)屹培,保證高效率默穴。

新生代收集

G1的新生代收集跟ParNew類似,如果存活時(shí)間超過(guò)某個(gè)閾值褪秀,就會(huì)被轉(zhuǎn)移到S/O區(qū)蓄诽。

年輕代內(nèi)存由一組不連續(xù)的heap區(qū)組成, 這種方法使得可以動(dòng)態(tài)調(diào)整各代區(qū)域的大小

老年代收集

分為以下幾個(gè)階段:

初始標(biāo)記 (Initial Mark: Stop the World Event)

在G1中, 該操作附著一次年輕代GC, 以標(biāo)記Survivor中有可能引用到老年代對(duì)象的Regions.

掃描根區(qū)域 (Root Region Scanning: 與應(yīng)用程序并發(fā)執(zhí)行)

掃描Survivor中能夠引用到老年代的references. 但必須在Minor GC觸發(fā)前執(zhí)行完

并發(fā)標(biāo)記 (Concurrent Marking : 與應(yīng)用程序并發(fā)執(zhí)行)

在整個(gè)堆中查找存活對(duì)象, 但該階段可能會(huì)被Minor GC中斷

重新標(biāo)記 (Remark : Stop the World Event)

完成堆內(nèi)存中存活對(duì)象的標(biāo)記. 使用snapshot-at-the-beginning(SATB, 起始快照)算法, 比CMS所用算法要快得多(空Region直接被移除并回收, 并計(jì)算所有區(qū)域的活躍度).

清理 (Cleanup : Stop the World Event and Concurrent)

在含有存活對(duì)象和完全空閑的區(qū)域上進(jìn)行統(tǒng)計(jì)(STW)、擦除Remembered Sets(使用Remembered Set來(lái)避免掃描全堆媒吗,每個(gè)區(qū)都有對(duì)應(yīng)一個(gè)Set用來(lái)記錄引用信息仑氛、讀寫操作記錄)(STW)、重置空regions并將他們返還給空閑列表(free list)(Concurrent)

18. JVM中對(duì)象的創(chuàng)建過(guò)程

1. 拿到內(nèi)存創(chuàng)建指令

當(dāng)虛擬機(jī)遇到內(nèi)存創(chuàng)建的指令的時(shí)候(new 類名)闸英,來(lái)到了方法區(qū)锯岖,找 根據(jù)new的參數(shù)在常量池中定位一個(gè)類的符號(hào)引用。

2. 檢查符號(hào)引用

檢查該符號(hào)引用有沒(méi)有被加載自阱、解析和初始化過(guò)嚎莉,如果沒(méi)有則執(zhí)行類加載過(guò)程,否則直接準(zhǔn)備為新的對(duì)象分配內(nèi)存

3. 分配內(nèi)存

虛擬機(jī)為對(duì)象分配內(nèi)存(堆)分配內(nèi)存分為指針碰撞和空閑列表兩種方式沛豌;分配內(nèi)存還要要保證并發(fā)安全趋箩,有兩種方式赃额。

3.1. 指針碰撞

所有的存儲(chǔ)空間分為兩部分,一部分是空閑叫确,一部分是占用跳芳,需要分配空間的時(shí)候,只需要計(jì)算指針移動(dòng)的長(zhǎng)度即可竹勉。

3.2. 空閑列表

虛擬機(jī)維護(hù)了一個(gè)空閑列表飞盆,需要分配空間的時(shí)候去查該空閑列表進(jìn)行分配并對(duì)空閑列表做更新。

可以看出次乓,內(nèi)存分配方式是由java堆是否規(guī)整決定的吓歇,java堆的規(guī)整是由垃圾回收機(jī)制來(lái)決定的

3.2.5 安全性問(wèn)題的思考

假如分配內(nèi)存策略是指針碰撞,如果在高并發(fā)情況下票腰,多個(gè)對(duì)象需要分配內(nèi)存城看,如果不做處理,肯定會(huì)出現(xiàn)線程安全問(wèn)題杏慰,導(dǎo)致一些對(duì)象分配不到空間等测柠。

下面是解決方案:

3.3 線程同步策略

也就是每個(gè)線程都進(jìn)行同步,防止出現(xiàn)線程安全缘滥。

3.4. 本地線程分配緩沖

也稱TLAB(Thread Local Allocation Buffer)轰胁,在堆中為每一個(gè)線程分配一小塊獨(dú)立的內(nèi)存,這樣以來(lái)就不存并發(fā)問(wèn)題了朝扼,Java 層面與之對(duì)應(yīng)的是 ThreadLocal 類的實(shí)現(xiàn)

4. 初始化

分配完內(nèi)存后要對(duì)對(duì)象的頭(Object Header)進(jìn)行初始化赃阀,這新信息包括:該對(duì)象對(duì)應(yīng)類的元數(shù)據(jù)、該對(duì)象的GC代擎颖、對(duì)象的哈希碼凹耙。

抽象數(shù)據(jù)類型默認(rèn)初始化為null,基本數(shù)據(jù)類型為0肠仪,布爾為false....

5. 調(diào)用對(duì)象的初始化方法

也就是執(zhí)行構(gòu)造方法肖抱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市异旧,隨后出現(xiàn)的幾起案子意述,更是在濱河造成了極大的恐慌,老刑警劉巖吮蛹,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荤崇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡潮针,警方通過(guò)查閱死者的電腦和手機(jī)术荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)每篷,“玉大人瓣戚,你說(shuō)我怎么就攤上這事端圈。” “怎么了子库?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵舱权,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仑嗅,道長(zhǎng)宴倍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任仓技,我火速辦了婚禮鸵贬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脖捻。我一直安慰自己恭理,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布郭变。 她就那樣靜靜地躺著,像睡著了一般涯保。 火紅的嫁衣襯著肌膚如雪诉濒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天夕春,我揣著相機(jī)與錄音未荒,去河邊找鬼。 笑死及志,一個(gè)胖子當(dāng)著我的面吹牛片排,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播速侈,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼率寡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了倚搬?” 一聲冷哼從身側(cè)響起冶共,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎每界,沒(méi)想到半個(gè)月后捅僵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眨层,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年庙楚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趴樱。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馒闷,死狀恐怖酪捡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窜司,我是刑警寧澤沛善,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站塞祈,受9級(jí)特大地震影響金刁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜议薪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一尤蛮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斯议,春花似錦产捞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至恋昼,卻和暖如春看靠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背液肌。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工挟炬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗦哆。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓谤祖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親老速。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粥喜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • JVM架構(gòu) 當(dāng)一個(gè)程序啟動(dòng)之前,它的class會(huì)被類裝載器裝入方法區(qū)(Permanent區(qū))橘券,執(zhí)行引擎讀取方法區(qū)的...
    cocohaifang閱讀 1,666評(píng)論 0 7
  • 通過(guò)這篇文章你能知道的問(wèn)題: 1.如何判斷對(duì)象是活著還是死去容客? 2.在Java語(yǔ)言中,可作為GCRoots的對(duì)象有...
    beneke閱讀 1,353評(píng)論 0 1
  • 《深入理解Java虛擬機(jī)》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分约郁。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,097評(píng)論 1 34
  • 原文閱讀 前言 這段時(shí)間懈怠了缩挑,罪過(guò)! 最近看到有同事也開(kāi)始用上了微信公眾號(hào)寫博客了鬓梅,挺好的~給他們點(diǎn)贊供置,這博客我...
    碼農(nóng)戲碼閱讀 5,974評(píng)論 2 31
  • 1、java虛擬機(jī)發(fā)展史 1.1 Sun Classic jdk1.0-jdk1.4只能用解釋器方式解...
    茨菇雪菜閱讀 410評(píng)論 0 0