Java最大的優勢真的在于跨平臺嗎?

n6bg 9年前發布 | 21K 次閱讀 Java

Java最大的優勢真的在于跨平臺嗎?

以下討論只針對 PC 端和移動端。

Java 最大的優勢真的在于跨平臺嗎?以前是,但現在已經不是了。

有跨平臺需求的僅僅是客戶端應用,而不是服務端。例如桌面應用,你的客戶可能是 Windows 用戶,也可能是 Linux 用戶,這時候如果不想多投入成本對各個平臺進行適配,那么 Java 所謂的”Write once, run everywhere”就顯得異常光彩。然而今天,整個軟件世界都在向B/S應用傾倒(嵌入式除外),即使要做客戶端跨平臺,QT 等第三方框架遠遠比 Swing 更強大,Java 在桌面應用領域基本被淘汰已經是不爭的事實了,而當初 Java 引以為豪的 Applet 也早已銷聲匿跡。如果說客戶端 Java 還有一點優秀的話,那只有 Android 了。Android 最初確實靠 JVM 屏蔽了不同硬件設備之間的區別并取得了巨大的成功,但在今天,Android L 中 ART 模式的出現也即將顛覆這一情況,況且 Google 還可能會想用自家的 Go 語言取代 Java 成為 Android 平臺的第一語言。所以在客戶端,Java 幾乎完敗。

服務端應用不需要跨平臺。做一個 Web 服務器,我想沒有哪家公司今天用 Linux,下個月就換 Windows 吧?如果僅僅是更換 Linux 發行版,如從 Debian 到 Fedora,本質上講其 Linux 內核是不變的,因此像 C++ 這樣純編譯類型的語言已經沒什么問題。如果做游戲服務器,我想幾乎都會選擇 Linux 而不是 Win 平臺。Java 的跨平臺優勢的實用性其實已經被大大弱化了,可以說在實際應用中并不明顯,在一般情況下幾乎感知不出 Java 還能跨平臺這個特性。作為三大商用 JVM 之一的 JRockets 是只有編譯器的 JVM,即應用啟動時會將字節碼全部編譯為本地機器碼,這其實就很大程度上摒棄了跨平臺,而追求性能。

今天,Java 最大的優勢在于其龐大而完善的生態系統。 一門編程語言是否能流行,主要是由其生態系統決定的。Java 生態系統的完善性主要體現在以下幾個方面:

Java 擁有世界上數量最多的程序員。你說他們是農民也好,但數量放在那里,最明顯的效果就是公司招人的時候會比較容易地招到 Java 程序員。試想如果你想要做一套軟件,你有一個很棒的技術方案需要用C++,Scala 或 Ruby 等語言實現,但招不到足夠的人手,那么計劃多半泡湯。這時候你的應用 Java 也能做到,并且很輕松就能招到足夠的人,那么你選擇 Java 的可能性就要大一些。

Java 擁有大量的第三方類庫。假如你想解析 HTML,用C/C++這類語言恐怕多半只能自己編寫解析算法庫了,而如果是 Java,你可以非常輕松地在 Github 上找到 JSoup,使用 Maven 導入依賴后分分鐘就搞定 HTML。為此還有一句諷刺 Java 的話是:“我們不生產代碼,我們只是 Github 的搬運工。”這句話從字面上看是很有道理的,但卻忽略了對軟件生產效率的提升所帶來的巨大價值。對于軟件的開發,公司的唯一成本其實就是“人頭費”,每減 少一個月開發時間,就能幫助公司節省幾十萬幾千萬的研發成本。

Java 擁有功能強大的 IDE。 Eclipse,通過插件幾乎可以滿足你開發的任何需求。它雖然有些慢,但你可以通過 JVM 調優來提高程序的流暢度,千萬不要使用默認的 JVM 參數。不過,IntelliJ Idea 已經完全超越 Eclipse 了,Idea 的智能程度幾乎可以媲美 Win 平臺下的 VS。我是那類離了 Vim 就活不下去的人,在這兩款 IDE 中都有 Vim 插件從而讓我愉快地存活下去。

Java 擁有很多殺手級應用。 不必多說,Spring, Struts, Hibernate, Hadoop, Tomcat, JBoss 等等。

Java 的語法特性很少。對,這也是一項優點。C++相比C添加了大量特性,學起來費事不說,用起來還會降低代碼可讀性,其實是費了工夫不討好。當今世界對編程語 言的要求是語法簡單,代碼可讀,對性能已經是退而求其次了,因此才誕生了 Python, Ruby 這樣的編程語言。有很多人批評 Java 語法寫起來很臃腫,我承認這一點,但事實是,編程語言從來都不是因為語法臃腫而被淘汰的,決定其生死的是生態系統。對于批評者,引用知乎的一句話:”動態 類型一時爽,代碼重構火葬場”

Java 的性能已經足夠高了。 Sun/Oracle 的 HotSpot JVM 內置的 JIT 編譯器在運行時對字節碼已經做出了非常大的優化努力,服務端應用啟動后對 JVM 進行足夠的”預熱”,并給出合理的啟動參數即可。如果不是對性能十分敏感的系統類應用,Java 已經足夠快了。有一種簡單可行的方法可以形象地看出這點,在 JVM 啟動參數中添加 +XX:PrintCompilation 可以看到 JIT 編譯器的忙碌。當今世界對軟件的需求量越來越大,在性能可接受的情況下,開發效率才是第一位的,這也是 Python 這類動態腳本語言流行的主要原因。

以上僅做客觀分析,并不想引起語言戰爭。畢竟,沒有最好的語言,只有最適合某種項目的語言。引用黑格爾的一句話:”存在即合理。”

 本文由用戶 n6bg 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!