首頁
中文書目錄
原文書目錄
 站內快速搜尋
資源中心
Book Series
Special Interest













■好消息,歐萊禮書籍已重新鋪貨至各大書局及網路書店,歡迎讀者選購       ■歡迎各院校採用歐萊禮書籍,學校團購請洽校園服務團隊

[書籍導讀]

Java 效能調校技巧


C/C++ 程式設計師對 Java 的第一印象是「慢」;沒錯,這正是 Java 最為人詬病之處。不過,當 C/C++ 程式設計師開始學會用 Java 寫出程式後,就會像毒品上癮一樣,欲罷不能。因為 Java 讓程式設計師不必自己管理記憶體,也沒有跨平台問題的種種考量,而殊不知這些正是犧牲效率所換得的代價。『興一利必生一弊』這句話似乎再次印證在 Java 身上。

難道「慢」真的是 Java 的原罪?在 CPU 運作時脈突破 1 GHz、RAM 動輒上百 MB 的今天,Java 的確有比較多的本錢可以揮霍。不過,倘若你告訴你的業主,要求他們升級硬體來配合你的軟體,身為 programmer 的你,不知會不會感到一絲絲良心不安?如果你不會有這樣的感覺,那麼這本書 — 對你而言 — 也就沒有存在的價值。而機會將屬於那些懂得調整程式碼以及軟體環境的傢伙。

在你決定買下這本書之前,有件事必須先聲明,這本書是寫給那些“有豐富經驗”的程式師與系統分析師看的,而且作者假設你的底子夠紮實,能理解 OS、compiler、資料結構、程式語言、OOPL 這幾門科目的常用術語。因此,作者不會解釋什麼是「虛擬機器」,也不打算釐清「Java 程式語言」與「Java 平台」之間的模糊界限,用詞上也不會刻意強調 object 與 instance 之間的不同 ...,這些基礎,應該在你對這本書感到興趣之前,就該學會了。如果你真的是 Java 的初學者,我並不建議你現在 K 這本書,因為你可能學不到你應該知道的基礎概念,反而會讓你知道太多普通初學者還不必知道的知識,這可能會讓你在練習寫程式時,心存太多顧忌,反而下不了手。

除了「調整效能」這中心議題之外,其實本書可以當成「作業系統」、「編譯技術」、「記憶體管理」、「資料結構」、「軟體工程」這些科目的輔助教材。說實在的,調整程式效率真的是很無趣的一件事 — 如果只知道盲目嘗試的話;然而,這可能也是最讓人有成就感的事之一,即使你已相當瞭解「怎麼調整」背後所隱含的機制,當你發現你的程式可以在不藉助硬體升級的情況下,靠軟體手段硬擠出一倍效率,那種成就感,不是任何言語與文字可以形容的。

舊聞一則
在本書出版之前,JavaWorld 公佈了他們 2001 年度風雲產品的入圍名單。當然,很多雜誌都有這種年度大獎,而且各家媒體各有偏好,但是像 JavaWorld 這種老字號的 Java 線上雜誌,選出來的產品還是蠻具代表性的。如同其它獎項一樣,入圍就是肯定,在名單上的都是業界有口皆碑的產品。

在「最佳 Java 虛擬機器」獎項,入圍的是 Blackdown 1.3 Linux、Sun 的 Java HotSpot for Windows、以及 Sun 的 Java HotSpot for Solaris。奇怪的是,IBM 的 JVM 並未在名單上出現,這應該算是一大遺珠。

入圍「最佳 Java IDE」獎項的是眾望所歸的 Borland JBuilder、IBM VisualAge 與 Sun 的Forte 2.0。「最佳 Java Application Server」則是照市場佔有率前三名排隊,包括 BEA WebLogic、IBM WebSphere以及 iPlanet 的iPlanet Application Server。最佳 Java 書籍則包括 Bruce Eckel 那本出名的《Thinking in Java》第二版,O'Reilly的《Java Performance Tuning》,和同是 O'Reilly出版的《Java Servlet Programming》。值得一提的是有個獎項是「最具創意的 Java 產品」,名列榜單的是 Tomcat 3.2、Sun 的 Java WebStart 和 IBM 的 VisualAge。我想 Java WebStart 應該是篤定獲得這獎,因為其他兩項產品放在這個獎項實在有點奇怪。

當這本書到你手上時,得獎名單應該早就出來了,你可以在下列網址看到這篇「舊聞」:

http://www.javaworld.com/javaworld/jw-05-2001/jw-0504-finalists.html

如果你真的很懶得調整自己的程式運作效率,那麼,盡量採用上述得獎的風雲產品,好歹也是一種解決之道。

關於中文版
這本書的讀者定位相當清晰:Java 專家。因此,本書將儘可能使用 Java 專家常用的語彙來呈現,甚至可能出現一些比較俚俗的用語(像是“跑”程式)。對於那些一詞多義(例如,abstract、performance)、或者難以用中文解釋(像是 profile)、或者太囉唆(像 benchmark、reuseable)、或者是複合名詞(CPU-bound、platform-dependent)、或可能造成誤解(例如,method)、或者解釋成中文後反而讓人看不懂(例如 compiler inlining)的術語,我們會視狀況保留原文或以其它最接近原意的詞彙替代,我想,這應該能符合大多數 Java 專家的習慣;不過,我也必須承認,這真的是不得已之惡,這是因為中文天生的多樣性(不然哪來那麼多方言?),而且至今沒有一套公認的統一譯詞標準,所以姑且就讓我們偷懶一下。既然讀者都是 Java 專家,應該沒道理看不懂這些原文術語,不然,Java 那些又臭又長的 interface、class、method,你是怎麼記住的?

對於那些應該譯成中文,但是難以一言以蔽之,而原文又過長的術語(像是 hierarchical method invocation),我們另外加註解來解釋,這樣可以同時保留作者原意,又避免譯文過長的現象。


林長毅 謹識
lin@oreilly.com.tw

| 首頁 | 聯絡我們 |
© 2009, O'Reilly Media, Inc. Taiwan Branch