標籤:
2004年畢業的時候,聽說Java程式員工作比較好找,就這樣開始與Java結緣。一晃10幾年過去了,做了很多項目,也發布了一些Java方面的技術性文章,總的來說,這10年時間一直都在與一個永恒的話題糾纏—“效能最佳化”。
回想一下,我的大多數時間都被花在了處理整個大型系統的效能提升方面,遇到的問題很多情況下是本可以使用O(log N)演算法,結果我卻使用了O(n2)演算法,此外,一直在糾纏於GC效能最佳化、JVM編譯器的效能最佳化、Java企業級API調用方法等等。
我的這些經曆其實是大多數Java程式員在Java的15+年時間裡的一個縮影,有個資料可能大家都知道,Java1.1.8的效能是Java1.0的8倍,並且Java1.1.8第一次正式引入了just-in-time編譯器。在之後的十幾年時間裡,Sun公司及開源社區圍繞著效能問題做了大規模的提升,主要集中在JVM記憶體回收機制及相應演算法提升、編譯器演算法提升、各類API提升等等方面。但是這些最佳化、提升總是會存在瓶頸的,現在已經不可能像當初通過引入Just-in-time編譯器、JVM記憶體回收引入並行演算法這樣的方式大幅度提升Java效能了,還是需要程式員自己通過對JVM的深入瞭解、代碼的整體最佳化、合理的系統架構等來提升系統效能。
隨著時間的推移,我們現在已經不用擔心記憶體的問題了,我目前使用的伺服器都是256GB以上記憶體的機器。此外,JVM也引入了新的記憶體回收行程G1,G1較過去的記憶體回收行程更加自動化,同時,雲端運算的興起協助我們解決了單機問題,現在已經完全可以通過向雲端運算服務商租用資源的方式解決資源瓶頸問題。Java8以及後續版本會通過引入Lambda項目繼續致力於更好地利用多核處理器。此外,在JDK上設計和實施一個模組系統,然後將系統應用於JDK本身也會是一個趨勢,這樣可以令大塊的代碼更易於管理,促進應用和大型運算的代碼重用。甲骨文公司表示,他們Java8的前景很看好,並且已經開始討論Java 9發展的關鍵領域,比如加入一個self-tuning JVM,提高本地整合和大規模多核的可擴充性,通過新的元對象協議和資源管理員為雲應用添加跨語言支援。預計Java9和10將加入大資料、多語言的互通性、雲端運算和移動,預期分別於2015年和2017年發布。
無論自己的未來職位是什麼,我都會繼續深入研究Java及相關技術,繼續堅持發布技術性文章。十幾年過去了,我想對Java說:“我們是互相離不開了”。
[Java二十周年]我的十多年經驗與未來分析