參加工做一年多來,一直對JVM都是抱着神聖的、未知的態度,感受可望而不可即。最近Kafka集羣有個問題困擾了我好久,服務器莫名其妙宕機,網上找了不少資料也沒有解決。後來迫不得已,設置成了天天定時重啓集羣,然而只是暫時解決了這個問題,我並無找到問題的根源,鬼知道它何時又會出問題。這讓我深入明白一個道理,要真正掌握一項技術,必須深刻到底層,必須吃透,不然你永遠是一個只會增刪改查的碼農。Kafka的底層如今依然在學習,如今仍是停留在比較淺顯的層次,學無止境啊。在解決上述我說到的這個問題時,再一次遇到了JVM的相關知識,如今更加深入的知道,理解掌握jvm原理對Java開發者是多麼重要。人生而懶惰,須要常常提醒本身現實社會的殘酷性,這也是我打算寫博客的緣由之一。常說技術改變世界,具體對開發者而言,即代碼改變世界,我要爲了這一崇高的理想而努力奮鬥。廢話很少說,雞血打完了,下面直接上乾貨(如下內容都是基於另一篇博客整理的,包括後續的所有系列博客都是站在巨人的肩膀上學習,特此聲明,原文出處:http://www.cnblogs.com/xrq730/p/4826691.html)。html
Java設計者們將Java劃分爲3種結構獨立但卻彼此依賴的技術體系分支,它們分別對應着不一樣的規範集合和組件:java
一、Java SE(標準版),主要活躍在桌面領域,主要包含了Java API組件。編程
二、Java EE(企業版),活躍在企業級領域,除了包含Java API組件外,還擴充有Web組件、事務組件、分佈式組件、EJB組件、消息組件等,綜合這些技術,開發人員徹底能夠構建出一個具有高性能、結構嚴謹的企業級應用,而且Java EE也是用於構建SOA(面向服務架構)的首選平臺。安全
三、Java ME(精簡版),活躍在嵌入式領域,稱之爲精簡版的緣由是,它僅保留了Java API中的部分組件,以及適應設備的一些特有組件。服務器
Java發展至今已經演變爲了一套強大的技術體系,那麼組成這套技術體系的的具體技術包括瞭如下四項:架構
1.Java編程語言jvm
2.字節碼編程語言
3.Java API,包括Java API類庫,和來自商業機構以及開源社區的第三方類庫分佈式
4.Java虛擬機性能
Java能得到如此普遍的承認,除了它擁有一門結構嚴謹、面向對象的編程語言以外,還有許多不可忽視的優勢:
一、它擺脫了硬件平臺的束縛,實現了「一次編寫、處處運行」
二、它提供了一個相對安全的內存管理和訪問機制,避免了絕大部分的內存泄露和指針越界問題
三、它實現了熱點代碼檢測和運行時編譯及優化,這使得Java應用能隨着運行時間的增長而得到更高的性能
四、它有一套完整的應用程序接口,還有無數來自商業機構和開源社區的第三方類庫來幫助它實現各類各樣的功能
五、它與身俱來對分佈式技術的支持就比較完善
一、JDK(Java Development Kit),是用於支持Java程序開發的最小環境,基本上Java程序設計語言、Java虛擬機、Java API類庫這三部分組成了JDK
二、JRE(Java Runtime Enviroment),是支持Java程序運行的標準環境,Java API類庫中的Java SE API和Java虛擬機這兩部分組成了JRE
其實JDK在一開始並非開源的,可是隨着開源運動的蓬勃發展,2006年Sun公司宣佈將對Java開放源代碼,開源的Java平臺開發主要集中在OpenJDK項目上。2009年4月15日,Sun公司正式發佈OpenJDK,JDK 7則是Java開源後發佈的第一個版本,任何組織和我的均可覺得Java的發展作出貢獻。
爲何Java能夠實現所謂的「一次編寫,處處運行」,主要是由於虛擬機的存在。Java虛擬機負責Java程序設計語言的安全特性和平臺無關性。Java虛擬機屏蔽了與具體操做系統平臺相關的信息,使得Java語言編譯器只須要生成在Java虛擬機上運行的字節碼,就能夠在多種平臺上不加修改地運行。Java虛擬機使得Java擺脫了具體機器的束縛,使跨越不一樣平臺編寫程序成爲了可能。要多提一句,咱們如今說的Java虛擬機基本上都是JDK自帶的虛擬機HotSpot,這款虛擬機也是目前商用虛擬中市場份額最大的一款虛擬機,能夠經過在命令行程序中輸入「java -version」來查看:
其實市面上還有不少別的優秀的虛擬機。Sun公司除了有大名鼎鼎的HotSpot外,還有KVM、Squawk VM、Maxine VM,BEA公司有JRockit VM、IBM公司有J9 VM等等。