當前位置:
首頁 > 最新 > 附四 開發環境相關

附四 開發環境相關

蘑菇天堂說在開頭:要學習Java一定要動手敲代碼,如果感覺敲代碼比較痛苦,那建議看看其他研發崗位的技能要求,也許最快的放棄反而是最正確的。敲代碼需要先搭環境選擇最喜歡的編譯工具。eclipse或者InteliJ IDEA任選其一就OK,別在這上面投入太多精力,最早的時候用文本編輯器學Java的時代,大家學得也並不慢。

常見問題

1、說說JDK、JRE、JIT都是啥?

2、JDK環境變數如何配,各個Jar的作用是什麼?

3、什麼是JVM?Java跨平台的原理是什麼?

4、JVM將類載入過程劃分成哪幾步?

5、描述一下JVM載入class文件的原理機制?

6、JVM內存管理的機制?

蘑菇解答

1、對於這個問題只記住概念是不夠的,請重點記一下下面的圖

JRE代表 Java 運行時(Java run-time),是運行 Java 應用所必須的。JDK 代表 Java 開發工具(Javadevelopment kit),是 Java 程序的開發工具,如 Java 編譯器,它也包含 JRE。JVM代表 Java 虛擬機(Java virtualmachine),它的責任是運行 Java 應用。JIT 代表即時編譯(Just In Time compilation),當代碼執行的次數超過一定的閾值時,會將 Java 位元組碼轉換為本地代碼,如,主要的熱點代碼會被轉換為本地代碼,這樣有利大幅度提高 Java 應用的性能。

2、作為程序員應該充滿好奇,特別是每天都看見,但又常常忽略的內容。

配置有如下三步,以windows配置為例:

新建->變數名"JAVA_HOME",變數值

"C:Javajdk1.8.0_05"(即JDK的安裝路徑)

編輯->變數名"Path",在原變數值的最後面加上「;%JAVA_HOME%in;%JAVA_HOME%jrein」

新建->變數名「CLASSPATH」,變數值「.;%JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar」

那麼我們都配置了什麼?

rt.jar是JAVA基礎類庫,基礎數據類型等io.lang. 比如裡面有String類Long類等等。

tools.jar是系統用來編譯一個類的時候用到的,即執行javac的時候用到

dt.jar是關於運行環境的類庫,主要是swing的包 在用到swing時最好加上。

Path配置為了系統能夠找到bin下的命令, classpath是告訴Java到哪裡尋找相關類所在的jar。用eclipse或者inteljidea還是調用這些,java所有的一切都是和這些相關,面試問不問已經不重要了,重要的是Java程序員必須知道。

3、一個老生常談的問題,現在已經沒有太多的企業問這麼基礎的問題,不過這反而是最終要的。

?JVM:(java virtual machine)java虛擬機。

?Java程序實際是在Java虛擬機(JRE是軟體實現)中運行,Java虛擬機類似一個模擬執行環境,在不同的操作系統上擁有不同的Java虛擬機實現,但是這些Java虛 擬機遵循統一的規範來解釋class文件,並將class文件中的指令轉換為本地操作系統對應的指令,這樣就實現了相同的class文件,可以通過Java虛擬機轉換為 對應操作系統上的對應指令,實現class文件,也就是Java程序,的跨平台性。

4、這個目前還經常被問。

JVM將類載入過程劃分為三個步驟:裝載、鏈接和初始化。

? 裝載(Load):裝載過程負責找到二進位位元組碼並載入至JVM中,JVM通過類的全限定名(com.bluedavy. HelloWorld)及類載入器(ClassLoaderA實例)完 成類的載入。

??鏈接(Link):鏈接過程負責對二進位位元組碼的格式進行校驗、初始化裝載類中的靜態變數及解析類中調用的介面、類。

??初始化(Initialize):執行類中的靜態初始化代碼、構造器代碼及靜態屬性的初始化。

5、這個問題還被經常問。

JVM中類的裝載是由類載入器(ClassLoader)和它的子類來實現的,Java中的類載入器是一個重要的Java運行時系統組件,它負責在運行時查找和裝入類文 件中的類。

對於有經驗的人請自行了解一下雙親委派模式,已經這種模式進行載入的優勢。

6、這個問題會結合GC被問,而且實際中會使用到,所以這一塊請重點學習。

內存空間劃分為:Sun JDK在實現時遵照JVM規範,將內存空間劃分為堆、JVM方法棧、方法區、本地方法棧、PC寄存器。

堆: 堆用於存儲對象實例及數組值,可以認為Java中所有通過new創建的對象的內存都在此分配,Heap中對象所佔用的內存由GC進行回收,在32位操作系統 上最大為 2GB,在64位操作系統上則沒有限制,其大小可通過-Xms和-Xmx來控制,-Xms為JVM啟動時申請的最小Heap內存,默認為物理內存的1/64但小1G B;-Xmx為JVM可 申請的最大Heap內存,默認為物理內存的1/4 但小於1GB,默認當空餘堆內存小於40%時,JVM會增大Heap到-Xmx指定的大小,可通 過-XX:MinHeapFreeRatio =來指定這個比例;當空餘堆內存大於70%時,JVM會減小Heap的大小到-Xms指定的大小,可通過-XX:MaxHeapFreeRatio=來指 定這個比例,對於運行系統而言,為避免在運行時頻繁調整Heap 的大小,通常將-Xms和-Xmx的值設成一樣。

JVM方法棧: 為線程私有,其在內存分配上非常高效。當方法運行完畢時,其對應的棧幀所佔用的內存也會自動釋放。當JVM方法棧空間不足時,會拋

StackOverflowError的錯誤,在Sun JDK中可以通過-Xss來指定其大小。

方法區: 要載入的類的信息(名稱、修飾符等)、類中的靜態變數、類中定義為final類型的常量、類中的Field信息、類中的方法信息。方法區域也是全局共享的,在一定 條件下它也會被GC,當方法區域要使用的內存超過其允許的大小時,會拋出OutOfMemory的錯誤信息。在Sun JDK中這塊區域對應Permanet Generation,又稱為持久代,默認最小值為16MB,最大值為64MB,可通過-XX:PermSize及-XX:MaxPermSize來指定最小值和最大值。

本地方法棧: 用於支持native方法的執行,存儲了每個native方法調用的狀態。在Sun JDK的實現中,和JVM方法棧是同一個。

PC寄存器: 佔用的可能為CPU寄存器或操作系統內存。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

論健全完善飛機駕駛室「艙門」
《黃尾記》——閑作畫

TAG:全球大搜羅 |