【Java二十周年】我比Java大10歲

來源:互聯網
上載者:User

標籤:java   20周年   jvm   效能最佳化   java8   

      

     1991年,我7歲,剛剛步入學堂不到半年。而電腦在那個年代也是一個新奇的事物。可就在那樣的環境中,Java已經有了萌芽。那一年,SUN公司啟動綠色計劃,打算髮展一種可以在任何消費電子產品上啟動並執行軟體。但由於C++自身有很多不足,所以項目組決定自行開發一種新的語言Oak。最初,Oak應用於機頂盒,但是在當時市場不成熟的情況下,項目失敗了。但Oak卻得到了SUN領導的賞識,於是:

      1995年3月23日,在對Oak進行小規模改造後Java語言誕生了,並廣泛應用於互連網領域。

一年後,在1996年,我很順利得從小學畢業了。不過這不是重點,重點是在同一年裡,Java也從SUN公司“小學畢業”。在那一年裡,SUN首次對外發布了JDK1.0。當然這個時候,Java還很薄弱。大部分類庫都不完善。支援Java啟動並執行虛擬機器是一款叫做Classic VM的虛擬機器。

      光陰如梭,一晃6年過去了,在2002年,我進入大學學習。在同一年裡,JDK 1.4發布了。在新的JDK中,徹底淘汰了古老的Classic VM虛擬機器,使用Hotspot作為其預設虛擬機器。也就是現在最常用的Java虛擬機器。然後,此時,雖然我已經接觸了VB 6.0、Pascal等語言,但對Java還是相當陌生的。

      大學裡的學習是相當密集的。雖然前後接觸了不少程式設計語言。但正式接觸Java還是從大三開始。那時學校裡安排了Java的必修課。由此,我和Java就此結緣。但那時,我並不喜歡Java。從我的眼光看,一門在控制台輸出“Hello World”都要敲老長一段命令的語言能有什麼前途?就如同現在大部分人抨擊Java那羅裡吧嗦的文法一樣,那時,我更傾向於C的強大、VB的簡明。

      雖然滿肚子不喜歡Java,但作為一門必須課,是絕對不能怠慢的。否則文憑難保。為了學好Java。我買了一本《Java程式設計方法與執行個體》的書,這就是我第一本Java的書籍。這本書可以說並沒有什麼名氣。和《Thinking in Java》之類的大牛比起來,可以說是弱爆了。但我對這本書的評價很高,因為它足夠簡單,明了。能夠讓初學者看得懂。而我卻特別不喜歡《Thinking in Java》,說實話開啟《Thinking in Java》這本磚頭書,我就立馬想睡覺。並不是因為裡面的內容不好,而是語言文字實在太彆扭了。

      2004年,也就是在我努力學習Java的這一年裡。JDK 1.5發布了。不得不說,這個版本加入了很多令人信服的特性。大大簡化了開發。比如,泛型,雖然Java對泛型的支援只停留在Java語言層面,但有總比沒有好。這讓我們可以更加愉快地閱讀代碼。此外,自動裝箱和拆箱也省略了好多機械式的代碼。註解可以讓我們給類、欄位或者方法附加新的活力。枚舉使得Java可以寫出更加優雅的代碼。增強for迴圈,讓我們的程式更為簡練。總之,我認為JDK 1.5絕對是一個裡程碑意義的版本。它帶給我們太多的驚喜。

      經過了2年的Java學習,在2006年,我光榮的本科畢業了。我的畢業設計是與設計模式相關的課題。由於一次偶然的機會,我接觸到了設計模式,之後,就順理成章得將它作為我的本科畢業論文。如果說設計模式是從建築學中誕生的,是在C++中由GoF引入軟體行業的,那它就是在Java中發揚光大的。很少有Java程式員不知道設計模式。那個時候,我手捧著閻宏的《Java與模式》,將那些設計模式和設計原則視為神一樣的存在,神聖而不可侵犯的藝術巔峰。不知道現在還有多少人保持著我當時的想法。《Java與模式》雖然和《Thinking in Java》一樣厚實,但是我並不會把它當做磚頭,因為它的確帶給我很多啟發。

      就在我本科畢業的那年(2006年),JDK6 beta發布了。在JDK 6並沒有像JDK 5那樣帶來翻天覆地的變化。但是帶來的改進也是很可觀的。比如,對指令碼語言的整合支援、編譯器API的訪問等。這些對語言的靈活性都有了很大的提高。但對我來說,我認為最為重要的改進是對synchronize的效能最佳化。在JDK 1.5中,synchronize關鍵的效能比較差。這導致我們不得不棄用synchronize,而使用ReentrantLock來改善程式的效能。但這顯然是很麻煩的。因為synchronize真是太好用了。而這個問題在JDK 6中得以解決。

      而就在這一年裡,Java開源並建立了OpenJDK。這是絕對是有曆史意義的重大事件。現在,在各大Linux發行版本中,預設安裝的都是OpenJDK。其重要性也就不言而喻了。而此時,我也有幸開始了我的研究生學習生涯。

      2008年,我正熱火朝天的乾著我的碩士畢業設計。這是一個基於P2P平台的多Agent架構。當然了,這是用Java做的。從底層的P2P網路到上層的應用都是使用Java實現的。為了能讓Agent做到在多個網路節點中遷移,執行,我開始涉足和關注一些Java中相對底層的技術。比如動態類載入、位元組碼等等。可以說,在這個時候,我才真正開始關注Java技術。很可惜,也許當時大資料和分散式運算並沒有像現在這麼火,也許是我太孤陋寡聞,無法意識到分散式運算的前景,這個分布式執行架構在我完成畢業設計後,也就長眠於我的硬碟中了。現在回想起來,還真是有些可惜。

      就在這一年,Oracle收購了BEA並將JRockit虛擬機器收入囊中。但我對此卻毫無感覺。

      2009年3月,我順利從取得了碩士學位,並開始了我的第一份工作。很有幸,這也是一份與Java打交道的工作。而就在這一年,Oracle宣布收購SUN。這對我來說,對於每一個Java程式員和社區來說,都是一顆重磅炸彈。一個崇尚開源和自由的產品,居然被一家無情的商業化公司收購。這對於Java來說是好還是壞呢?同樣令人擔憂的,還有MySQL的前途。

     我很幸運進了一家氛圍良好的公司。在老一輩工程師的帶領下,我才能有更多的成長。在工作的幾年中,也遇到了不少Java效能相關的問題。此時,我才開始涉足有關Java虛擬機器的一些內部機制,比如GC、記憶體分布等。可以說,大部分與此相關的知識是在工作中不斷積累的。

     2011年,JDK 7發布了。但是,非常遺憾的是,我們的應用還停留在JDK 6中。我相信,到目前為止,大部分既存系統可能使用的都是JDK 6。但版本遷移是一件大事,因為貿然進行大版本的改變,會給商業產品帶來很高的風險,也意味著測試人員要進行更多的測試。因此,除非有非常強烈的需求,否則,大版本的遷移是非常謹慎的。那JDK 7究竟給我們帶來了什麼呢?當然有一些文法上的增強和改變,比如,支援字串的switch、二進位整數的表示、支援多重異常捕獲以及try-with-resources語句進行資源管理。以及引入了NIO2。更為重要的是正式啟用了G1回收器。實際上G1在JDK6中就已經給出,但只是作為一個實驗性產品。此外,根據我的測試,JDK 7較JDK 6相比,效能也有一定幅度的提升。

     同時,JDK6中令人惱火的String記憶體泄露也在JDK中被完美解決。因為JDK7重新實現了java.lang.String類。讓它更加安全。字串常量池也從JDK 6中的Perm區移到了堆中。這也是為將來徹底消滅Perm區做的一點小準備吧!

     在動態語言編程盛行的今天,Java也與時俱進,雖說臃腫的身軀被一些人指指點點,但是任何變化都是需要時間的,在JDK 7中,Java虛擬機器引入了新的指令invokedynamic。用於支援動態調用。從此,動態語言在Java虛擬機器上就能更好的工作了。

     2014年,JDK 8發布。毫無疑問,JDK 8最引入注意的就是對函數式編程的支援。我們可以看到,Java正在儘可能將自己變的更加完美,從此,Java也可以使用很少的語句做很多的事情了(但這究竟是好是壞還需要時間的檢驗)。函數式編程這個亮點實在是太亮了,以至於我們很容易忽視JDK 8帶來的其它改進。比如,在JDK 8中,我們熟悉的Perm區被完全移除,取而代之的是稱為中繼資料區的直接記憶體空間。同時JDK 8中還為並發做了很大的增強,比如加入了LongAdder類。這是一個效能完爆AtomicLong的並發工具類。這你能想象嗎?

     追隨Java這麼多年,是不斷的積累和學習讓我得以和Java一起成長,這是我的幸運。Java不是完美的,就如同沒有任何事物是完美的。但這並不妨礙我們去熱愛一門技術,為了記錄多年以來我對Java的所學、所思、所想,於是《實戰Java虛擬機器——JVM故障診斷與效能最佳化》誕生了,它出版時正值2015年,這一年,我30歲,Java 20歲,我比Java大10歲。

【Java二十周年】我比Java大10歲

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.