JVM知識點題目

JVM是Java程序的運行環境,因此對於JVM的掌握有助於理解Java程序的執行以及編寫,尤其是運行時碰到的一些詭異問題,那麼怎麼樣能考察自己對於JVM關鍵知識點的掌握情況,幫助學習JVM機制呢,在這篇blog中來探討下。

對於Java程序而言,JVM的關鍵機制有:字節碼的加載、方法的執行、對象內存的分配和回收、線程和鎖機制,這幾個機制涉及到的jvm的知識點遠沒有寫這幾個字這麼簡單,裏面的複雜度還是非常高的。

字節碼的加載
JVM通過ClassLoader來完成字節碼的動態加載,這裏面涉及到的主要是ClassLoader的雙親委派、ClassLoader的編寫方法、Class是否被加載的唯一標識以及Class的加載過程。
在考察的時候我覺得可以以這麼兩道簡單的題來考察:
1、寫一段將目錄中指定的.class文件加載到JVM的程序,並通過Class對象獲取到完整類名等信息;
2、一段展示代碼,裏面包含一個全局靜態整型變量,問如果用兩個ClassLoader加載此對象,執行這個整型變量++操作後結果會是怎麼樣的?

方法的執行
JVM有自己的一套指令系統,字節碼中即已經是指令了,需要大概掌握了JVM對static、interface、instance、構造器採用的不同的執行方法,另外就是JVM中反射的實現(可以以Sun JDK來舉例)、動態代理的實現,最後相關的就是JVM執行字節碼的方式(解釋、JIT、Hotspot),以及什麼時候觸發編譯成機器碼,如何控制。
在考察的時候我覺得可以以這麼三道題來考察:
1、A a=new A();a.execute();和IA a=new A();a.execute();執行有什麼不同;
2、反射的性能低的原因是?
3、編寫一段程序,動態的創建一個接口的實現,並加載到JVM中執行;(可以允許用BCEL等工具)

對象內存的分配和回收
這塊涉及的知識點也是比較的多,例如JVM內存區域的劃分、自然類型和引用類型的內存分配的不同、TLAB、GC的算法、Sun JDK對於GC的實現、GC觸發的時機、GC的跟蹤和分析的方法。
在考察的時候我覺得可以以這麼三道題來考察:
1、經典的String比較程序題:
   String a="a";
   String b="b";
   String ab="ab";
   (a+b)==ab;  ??  (引深題,如何才能讓(a+b)==ab)
   ("a"+"b")==ab; ?? 
2、寫一段程序,讓其OutOfMemory,或頻繁執行Minor GC,但又不觸發Full GC,又或頻繁執行Full GC,但不執行minor GC,而且不OutOfMemory,甚至可以是控制幾次Minor GC後發生一次Full GC;
3、詳細講解GC的實現,例如minor GC的時候導致是怎麼回收對象內存的,Full GC的時候是怎麼回收對象內存的。

線程和鎖機制
這塊涉及的知識點仍然是非常的多,例如線程中變量的操作機制、線程調度機制、線程的狀態以及控制方法、線程的跟蹤和分析方法、同步關鍵字、lock/unlock的原理等。
在考察的時候我覺得可以以這麼幾道題考察下:
1、i++的執行過程;
2、一個線程需要等待另外一個線程將某變量置爲true才繼續執行,如何編寫這段程序,或者如何控制多個線程共同啓動等;
3、控制線程狀態的轉換的方法,或者給幾個thread dump,分析下哪個線程有問題,問題出在哪;
4、static屬性加鎖、全局變量屬性加鎖、方法加鎖的不同點?

 

轉自:http://www.blogjava.net/BlueDavy/archive/2009/03/27/262419.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章