新聞中心
Gilad Bracha在博客中寫(xiě)道:“我經(jīng)常說(shuō),Java的原罪在于它不是一個(gè)純面向?qū)ο蟮恼Z(yǔ)言(一切皆對(duì)象的語(yǔ)言)?!蔽闹杏懻摰闹饕獌?nèi)容不是純面向?qū)ο笳Z(yǔ)言的優(yōu)點(diǎn),而是提出了一個(gè)問(wèn)題:Java如果沒(méi)有原生數(shù)據(jù)類(lèi)型,是否能保持高性能?答案是肯定的。

創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、潮陽(yáng)網(wǎng)絡(luò)推廣、成都小程序開(kāi)發(fā)、潮陽(yáng)網(wǎng)絡(luò)營(yíng)銷(xiāo)、潮陽(yáng)企業(yè)策劃、潮陽(yáng)品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供潮陽(yáng)建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
Gilad首先拿類(lèi)型變化舉了一個(gè)簡(jiǎn)單例子。Java語(yǔ)言的char類(lèi)型最初用16位二進(jìn)制表示(符合當(dāng)時(shí)的Unicode標(biāo)準(zhǔn))。但是當(dāng)標(biāo)準(zhǔn)改變之后,“人們用Java處理unicode時(shí)不得不自己處理編碼格式”。至于性能的問(wèn)題,他提供了幾個(gè)例子演示如何在不影響效率的情況下處理對(duì)象。其中一個(gè)例子:
那么我們?nèi)绾伪苊馐褂迷鷶?shù)據(jù)類(lèi)型而又不損失性能呢?
Java有一套強(qiáng)制靜態(tài)類(lèi)型機(jī)制,它被編譯成靜態(tài)類(lèi)型的匯編語(yǔ)言(Java字節(jié)碼,即JVML)。它支持靜態(tài)類(lèi)。我不建議使用這些特性,但是我們需要知道。我們唯一需要做的就是根除原生數(shù)據(jù)類(lèi)型。
假設(shè)我們存在一個(gè)靜態(tài)類(lèi)Int表示32位整數(shù)。編譯器能夠把該靜態(tài)類(lèi)轉(zhuǎn)換為int類(lèi)型。因此,我們就可以編寫(xiě)標(biāo)準(zhǔn)的Java代碼而無(wú)需損失任何性能。
更有趣的例子包括:以操作符命名的方法、==操作符、實(shí)例鎖定和數(shù)組協(xié)變等等。
原生數(shù)據(jù)討論結(jié)論:
總之,Java原本可以完全面向?qū)ο蠖皇苊黠@的性能影響。但是它過(guò)去不是,現(xiàn)在不是,可能未來(lái)也不是。光榮易逝啊(Sic Transit Gloria Mundi)。
文章的讀者回復(fù)大多數(shù)都同意Gilad的觀點(diǎn)。
摘選如下:
◆Daniel Speiwak——事實(shí)上,聽(tīng)起來(lái)很像Scala。Odersky和朋友們提出了一種有關(guān)協(xié)變數(shù)組和消除原生的解決辦法:泛型特化。
◆abies ——可能并非如此簡(jiǎn)單。盡管我也認(rèn)為將原生類(lèi)型編碼為對(duì)象可以非常高效,但是總會(huì)有損失的。Smalltalk就是一個(gè)例子——大多數(shù)實(shí)現(xiàn)都把小/大整數(shù)區(qū)別對(duì)待,小整數(shù)被存放在非環(huán)形指針里。這意味著整數(shù)在不同大小轉(zhuǎn)換時(shí)表現(xiàn)出巨大的性能差異——對(duì)每一個(gè)整數(shù)的處理都有一些影響。我非常高興Java在數(shù)學(xué)運(yùn)算法方面有可能和C++/Fortran一樣快。
◆Osvaldo Doederlein——有關(guān)面向?qū)ο髒s原生數(shù)據(jù)類(lèi)型的討論首先面臨一個(gè)挑戰(zhàn):舉出至少一個(gè)純面向?qū)ο笳Z(yǔ)言相比擁有原生數(shù)據(jù)類(lèi)型和數(shù)組的語(yǔ)言沒(méi)有顯著的性能損失。不要拿高層次的應(yīng)用基準(zhǔn)來(lái)糊弄我。我要的是數(shù)學(xué)運(yùn)算/數(shù)組的微基準(zhǔn),或者是現(xiàn)實(shí)世界低層次的運(yùn)算,如數(shù)據(jù)壓縮、視頻編碼、網(wǎng)絡(luò)棧等等。
討論也包括一些技術(shù)上的例子以說(shuō)明兩者之間的鴻溝。
也許有關(guān)“OO爭(zhēng)論”最有趣的一些方面在這次討論中并沒(méi)有提到。比如:
效率vs面向?qū)ο蠹兌仁?0年代和90年初期(Java誕生之前)Smalltalk和C++語(yǔ)言之爭(zhēng)的焦點(diǎn),其實(shí)這是一個(gè)完全不相關(guān)的辯論,因?yàn)樗鲆?了OO語(yǔ)言誕生的原因。當(dāng)時(shí)最純正的OO語(yǔ)言是 Smalltalk和Self,兩者都明確的以Simula(不是Simula I)為榜樣以建立一種支持領(lǐng)域?qū)<液?jiǎn)單直接的表達(dá)問(wèn)題和解決方案的語(yǔ)言。影響性能是完全可以理解的!
文章作者認(rèn)為 Smalltalk在嵌入式、毫秒時(shí)間計(jì)時(shí)、切換的程序和實(shí)時(shí)的圖形顯示系統(tǒng)(應(yīng)用于噴氣式飛機(jī))中優(yōu)于C++應(yīng)用。這是因?yàn)镾malltalk應(yīng)用了很多編程技巧(比如預(yù)編譯的方法和Smalltalk對(duì)象可以直接與硬件打交道而不依賴(lài)操作系統(tǒng))以獲得性能優(yōu)勢(shì)。關(guān)鍵在于,編寫(xiě)相同的C++程序所花費(fèi)的開(kāi)發(fā)時(shí)間縮短了1/3。
Java從來(lái)沒(méi)有真正想成為一個(gè)面向?qū)ο笳Z(yǔ)言。如果Sun在獲取Smalltalk授權(quán)時(shí)沒(méi)有受到阻礙(ParcPlace的純粹商業(yè)錯(cuò)誤),Java可能根本不會(huì)存在。Oak將繼續(xù)沿著“智能烤面包機(jī)”的道路進(jìn)化,而不會(huì)成為Java的基礎(chǔ)。 Java的目的就是融合Samlltalk和C++的各自最佳特性,而不是成為一種純OO語(yǔ)言。
從代碼和語(yǔ)言“特征”的角度談?wù)揙O純度是絕對(duì)錯(cuò)誤的。對(duì)象是一種隱喻工具,開(kāi)發(fā)人員可以借此更好的理解問(wèn)題域,并獲得完全不同的、更加簡(jiǎn)單和富有效率的設(shè)計(jì)和架構(gòu)。如果一門(mén)語(yǔ)言是純面向?qū)ο?,“一切皆?duì)象”,僅僅意味著你可以直接表達(dá)你的設(shè)計(jì)而無(wú)需考慮這些這些設(shè)計(jì)在機(jī)器層面如何實(shí)現(xiàn)和執(zhí)行。
如果基于為何編程語(yǔ)言這樣設(shè)計(jì)、在機(jī)器執(zhí)行效率不是關(guān)鍵因素時(shí)對(duì)象是否真的提供了一種建立設(shè)計(jì)的好辦法等問(wèn)題來(lái)看待純OO/效率的爭(zhēng)論,還是非常有趣的。
【編輯推薦】
- 成為Java高手的重要過(guò)程
- Java GUI的發(fā)展和演化簡(jiǎn)史
- Java正則表達(dá)式工具類(lèi)實(shí)例
- 用Java壓縮文件解決沒(méi)有中文問(wèn)題示例
- Java與C++語(yǔ)言在作用域上的差異淺析
標(biāo)題名稱(chēng):沒(méi)有原生數(shù)據(jù)類(lèi)型,Java會(huì)更好嗎?
分享路徑:http://m.fisionsoft.com.cn/article/djdgssd.html


咨詢(xún)
建站咨詢(xún)
