Posted by: smallonely | September 15, 2004

[java] 一探究竟:新版J2SE 5.0

在Java九年發展歷史中,共經歷兩次重大改變。一是自JDK 1.1轉變至JDK
1.2,整個架構重新規劃,從此區分為Java Card、J2ME(Java 2 Platform Micro
Edition)、J2SE(Standard Edition)和J2EE(Enterprise
Edition)等四大領域,而JDK也改名成Java 2。

後續幾年改版,J2SE 1.3、J2SE 1.4大多只強化API功能,語言本身並無太多更改。
然而,今年即將發表的J2SE 1.5 (正式版本編號改為J2SE 5.0,代號Tiger),可說是
Java出道以來第二次重大變革。除新增各種不同新功能的API,也是語言層面改變最大的
一次。

J2SE 5.0一口氣新增15項JSR,內含多達十幾種的功能及語法更新,目的無非是要讓
Java程式開發人員可以更具效率得撰寫更為穩固的Java應用程式。到底有哪些的更新,又
能帶來何種便利性呢?讓我們一探就竟,看看這隻老虎的威力。

J2SE 5.0新功能分別內建於以下15項JSR中:

JSR-003 JMX Management API
JSR-013 Decimal Arithmetic
JSR-014 Generic Types
JSR-028 SASL
JSR-114 JDBC Rowsets
JSR-133 New Memory Model
JSR-163 Profiling API
JSR-166 Concurrency Utilities
JSR-174 JVM Software Monitoring and Management
JSR-175 Metadata
JSR-199 Compiler APIs
JSR-200 Pack Transfer Format
JSR-201 Four Language Updates
JSR-204 Unicode Surrogates
JSR-206 JAXP 1.3
這些JSR中包含許多新增功能,大致可簡單區分以下7項主題:

簡易開發(Ease of Development)

簡易開發可以說是本次改版的重點。利用一些語法上的更新與強化,降低程式撰寫的複雜
度,同時增加程式的可讀性,減少不必要、不直覺的程式碼。尤其是Collection
API的使用,更可感受到Tiger所具備的便利性。其主要新增的功能除了受到期待且爭議的
泛型(Generic)之外,還有Autoboxing/ auto-unboxing、Enums、Extended-loop、Static
import等。

擴充性與效能(Scalability and Performance)

「Java的效能不好」、「Java的效能是不是比不上C++」是其它陣營使用者,抑或是準備
轉換至Java平台的使用者心中常有的質疑。基於設計理念的不同,C語言可與作業系統緊
密結合,單純就速度比較,不可否認地,Java確實在某些層面敵不過C++。

但是你要知道,Java擅長領域並非速度多快,此項語言所能保證的是系統的穩定性。就像
越野車跟跑車來比速度,肯定跑車一定是快很多的。不過難到越野車就沒有贏的機會嗎?
今天要比爬山越野能力,跑車就無用武之地了。就算同樣是在市區裡比賽,不同的駕駛員
、不同的交通狀況,這些都是跟速度無關的條件,勝負往往也不是全靠速度。

若回頭看看速度,其實也沒有慢多少。每有新Java版本推出,都會進行效能調校與改善。
這次Tiger就加大執行時期的Heap,也強化Hotspot的效能,將可提供更快速且穩定的 New
I/O。尤其是視窗型的Java應用程式,使用者可明顯感受程式啟動的速度加快不少。

可監控、易管理(Monitoring and Manageability)

新版Tiger新增不少強化管理與監控功能的API。JMX Management API原本只應用於
J2EE,可便於系統管理人員管理J2EE應用系統中的各項資訊,如今,Tiger也正式加入此
組API。

除易於管理之外,Tiger另新增監控機制,可讓系統管理抑或程式開發人員直接使用該標
準API,撰寫監測與管理的應用程式,不僅能直接存取JVM狀態,進而可有效對應用程式或
系統進行效能調校。以往這些動作皆需Third-party廠商旗下工具產品才可完成,現在,
你可以自己撰寫程式完成這項工作。

桌面軟體(Desktop Client)

如前所述,Tiger提升視窗應用程式相關API的速度。此外,Tiger也更新Linux與Solaris
的AWT API (名為XAWT),同時全力支援OpenGL的最新版本。利用OpenGL的原生支援,
Java2D程式將可享受其所帶來的速度感。至於使用介面,Tiger也提供Windows
XP與Linux/Red Hat兩大作業系統全新的Look and Feel。

支援XML(Core XML Support)

Tiger裡也更新了對XML的規格支援,XML版本支援到1.1及Namespace,也支援XML
Schema及XSLT。對於底層SAX和DOM的部份,則支援到2.0.1和Level 3。相信用
Java來處理XML文件會更容易、更俱威力。

新增Unicode擴充字元(Unicode Supplementary Chars)

Tiger增加了一些在Unicode 3.1裡的一些擴充字元(Supplementary Chars)
,這些擴充字元的編碼方式有點類以Big5字元用ASCII編碼的方式,就是用兩組UTF-16高
、低字元,來表示這些擴充字元。不過你不用擔心該如何去區分一般或是擴充字元,
Tiger裡已經透明化處理相關的API,讓你字串/元的運算跟平常沒兩樣。

其他

其他新增的API,如JDBC RowSet,基本上可讓資料庫存取工作更為容易,
讀者若有興趣不妨參考甫落幕「JavaTwo」大會中,由蘇國鈞講師所介紹的Sun Java
Studio Creator中的範例,直接體驗一下JDBC RowSet的威力。

與取名Tiger的J2SE 5.0第一次接觸後,我的感覺是SCJP 1.5版本的認證考試
將會更難通過,因為對於開發人員而言,必須學習的東西更多。不過,對於初學Java程
式設計的人而言,Tiger確實實現簡易開發的諾言,開發人員不用在「為什麼不能直接把
1, 2, 3這些數字直接加入Set之中」這類問題上迷路,當然也更加容易撰寫出可執
行的程式。

就像有了自排車,駕駛不再需要煩惱何時該換檔,但若想要掌握駕馭速度的快感,還是
得了解排檔原理與功用,是吧?

 

艾群科技資深工程師  2004/08/16







Responses

  1. 看到這篇文章, 感觸蠻深的, 令我想起走過Java 2的那段日子

    個人從大一喜歡上Java之後, 經歷了許多時期
    //沒辦法, 當時OS/2上Java蠻熱的, 而且也有最快的軟體支援
    一開始Java簡潔的語法和設計, 的確蠻吸引人的
    Java 1.2推出時我還蠻懵懂的,
    不太了解到底Java 1.1.8跟 Java 2到底差別在哪裡
    甚至連Java都寫的不太好
    //應該還沒差到把整個程式寫到main(String[] args)的程度

    剛使用Java印象比較深刻的一次是
    寫程式找阿姆斯壯數,
    結果, 很訝異的是Java版本跑起來比Turbo C版本還快….

    一直, 我對Sun把Java定位為Platform,
    而不推出Native Compiler相當不以為意
    因為Hotspot再快, 越來越大的footprint
    Load in的時間也真是太久了….
    //當然早先有JET, IBM的HPJC(High Performance Java Compiler)
    //但是我買不起, 而當時GCJ也不堪用
    還有只重視Windows平台
    /*
    之後也因為這緣故, 碩一開始接觸GCJ/SWT
    深入看到一些東西後, 也大大的改變我的想法
    我落入了Free Java的行列, 不再追逐Sun Java
    這對我是很大的改變,
    向來我都不喜歡甚至排斥Non-Official的東西
    */

    還記得, 當大四的時候,
    曾因為這個觀點和能力很強的學弟大打筆戰
    之後這位學弟現在卻是Free Java的前鋒悍將
    Kaffe Project Official Developer,
    也活耀於GNU Classpath及GCJ上

    最後"稍稍"的Complain一下
    即使Sun創造了Java, 但是Sun並沒有做好很多事情
    Sun開創Java之後, 儘管假裝很開放
    但徹底的展現了小心眼, 處處打壓著Free Java,
    所以這類的Project得小心使用"Java"這個字(Kaffe, Eclipse…etc)
    而老是做一些金玉其外的東西,
    最近的Java "5"是一個(我想我還是會稱它 1.5)
    Swing是另外一個
    /*
    如果Swing不是錯誤?
    那Java-Gn

  2. 阿, 今天才看到, 看來回應的行數和字數有所限制
    把後面補齊吧

    /*
    如果Swing不是錯誤?
    那Java-Gnome和SWT就不會出現
    如果當初堅持的Same L&F on all platform不是問題
    現在就不會用可笑的Theme, 來搪塞Programmer這類的問題和需求
    */
    所謂的Generic又是另外一個
    /*
    根據<A
    Href="http://java.sun.com/features/2003/05/bloch_qa.html">這篇</A&gt;
    Generic是Compile-Time的事情
    也就是說, Sun所宣稱的Generic的支援
    是在Compile的時候作Check和處理
    而非C++方式產生對應的machine code
    基本上這樣的支援和AutoBoxing是沒啥兩樣的
    只是治標不治本….
    以上只是問題的一部份

    Sun感覺上只做一些好看的事情
    對於Java體質上的改善似乎沒有太大的興趣
    //碩二時PaulLiu發現一個關於質數的問題, 查閱結果發現1.2時就存在了
    而且一再的以避免Java的分歧為理由, 限制Java的可能性
    更甚者加以打壓….

    (哈, 開始喜歡Cross Hermit的"光與闇都是榮耀….")

  3. m 起來 :>


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Categories

%d bloggers like this: