日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

JVM知識(shí)點(diǎn)題目

 ipinyou 2009-10-10
JVM是Java程序的運(yùn)行環(huán)境,因此對于JVM的掌握有助于理解Java程序的執(zhí)行以及編寫,尤其是運(yùn)行時(shí)碰到的一些詭異問題,那么怎么樣能考察自己對于JVM關(guān)鍵知識(shí)點(diǎn)的掌握情況,幫助學(xué)習(xí)JVM機(jī)制呢,在這篇blog中來探討下。



對于Java程序而言,JVM的關(guān)鍵機(jī)制有:字節(jié)碼的加載、方法的執(zhí)行、對象內(nèi)存的分配和回收、線程和鎖機(jī)制,這幾個(gè)機(jī)制涉及到的jvm的知識(shí)點(diǎn)遠(yuǎn)沒有寫這幾個(gè)字這么簡單,里面的復(fù)雜度還是非常高的。



字節(jié)碼的加載

JVM通過ClassLoader來完成字節(jié)碼的動(dòng)態(tài)加載,這里面涉及到的主要是ClassLoader的雙親委派、ClassLoader的編寫方法、Class是否被加載的唯一標(biāo)識(shí)以及Class的加載過程。

在考察的時(shí)候我覺得可以以這么兩道簡單的題來考察:

1、寫一段將目錄中指定的.class文件加載到JVM的程序,并通過Class對象獲取到完整類名等信息;

2、一段展示代碼,里面包含一個(gè)全局靜態(tài)整型變量,問如果用兩個(gè)ClassLoader加載此對象,執(zhí)行這個(gè)整型變量++操作后結(jié)果會(huì)是怎么樣的?



方法的執(zhí)行

JVM有自己的一套指令系統(tǒng),字節(jié)碼中即已經(jīng)是指令了,需要大概掌握了JVM對static、interface、instance、構(gòu)造器采用的不同的執(zhí)行方法,另外就是JVM中反射的實(shí)現(xiàn)(可以以Sun JDK來舉例)、動(dòng)態(tài)代理的實(shí)現(xiàn),最后相關(guān)的就是JVM執(zhí)行字節(jié)碼的方式(解釋、JIT、Hotspot),以及什么時(shí)候觸發(fā)編譯成機(jī)器碼,如何控制。

在考察的時(shí)候我覺得可以以這么三道題來考察:

1、A a=new A();a.execute();和IA a=new A();a.execute();執(zhí)行有什么不同;

2、反射的性能低的原因是?

3、編寫一段程序,動(dòng)態(tài)的創(chuàng)建一個(gè)接口的實(shí)現(xiàn),并加載到JVM中執(zhí)行;(可以允許用BCEL等工具)



對象內(nèi)存的分配和回收

這塊涉及的知識(shí)點(diǎn)也是比較的多,例如JVM內(nèi)存區(qū)域的劃分、自然類型和引用類型的內(nèi)存分配的不同、TLAB、GC的算法、Sun JDK對于GC的實(shí)現(xiàn)、GC觸發(fā)的時(shí)機(jī)、GC的跟蹤和分析的方法。

在考察的時(shí)候我覺得可以以這么三道題來考察:

1、經(jīng)典的String比較程序題:

   String a="a";

   String b="b";

   String ab="ab";

   (a+b)==ab;  ??  (引深題,如何才能讓(a+b)==ab)

   ("a"+"b")==ab; ?? 

2、寫一段程序,讓其OutOfMemory,或頻繁執(zhí)行Minor GC,但又不觸發(fā)Full GC,又或頻繁執(zhí)行Full GC,但不執(zhí)行minor GC,而且不OutOfMemory,甚至可以是控制幾次Minor GC后發(fā)生一次Full GC;

3、詳細(xì)講解GC的實(shí)現(xiàn),例如minor GC的時(shí)候?qū)е率窃趺椿厥諏ο髢?nèi)存的,F(xiàn)ull GC的時(shí)候是怎么回收對象內(nèi)存的。



線程和鎖機(jī)制

這塊涉及的知識(shí)點(diǎn)仍然是非常的多,例如線程中變量的操作機(jī)制、線程調(diào)度機(jī)制、線程的狀態(tài)以及控制方法、線程的跟蹤和分析方法、同步關(guān)鍵字、lock/unlock的原理等。

在考察的時(shí)候我覺得可以以這么幾道題考察下:

1、i++的執(zhí)行過程;

2、一個(gè)線程需要等待另外一個(gè)線程將某變量置為true才繼續(xù)執(zhí)行,如何編寫這段程序,或者如何控制多個(gè)線程共同啟動(dòng)等;

3、控制線程狀態(tài)的轉(zhuǎn)換的方法,或者給幾個(gè)thread dump,分析下哪個(gè)線程有問題,問題出在哪;

4、static屬性加鎖、全局變量屬性加鎖、方法加鎖的不同點(diǎn)?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多