## 連載:面向對象葵花寶典:思想、技巧與實踐(5) - 面向對象迷思:面向對象導致性能下降?
**面向對象會導致性能降低?**
這是一個在IT江湖流傳已久的傳說,很多對面向對象不甚了解、或者一知半解的人,每當需要抵觸面向對象時,就會把這條“金科玉律”拿出來救駕!
更要命的是,每個相信這個傳說的人都會舉一個看起來很顯而易見的例子:C和Java的對比!
你可以到網上搜索一大堆C和Java的性能對比,你自己也可以做一個簡單的對比測試,我毫不懷疑測試結果肯定是C快,但這能證明面向對象導致性能降低么?
從語言層面來說,面向對象的語言肯定要比面向過程的語言性能要低一些,畢竟這是由處理機制決定的,就像不同的人的差別由基因決定一樣,這個很難改變。
但在實際應用中,除了上一章我們提到的專有系統(操作系統、驅動、嵌入式),對一般的業務系統來說,無論是企業級應用、還是互聯網應用、還是電信銀行應用,無一例外的都是復雜的系統,這些系統要和存儲系統(磁盤、磁帶等)打交道、要通過網絡進行交互、要訪問數據庫。。。。。。等等。
我們看一下常見的一些性能數據(量級數據,不一定精確):
CPU:?每秒10億次,性能是納秒級
內存:每秒1000萬次,每次請求時間是微秒級
磁盤:每次請求5ms,請求時間是毫秒級
網絡(TCP):每次網絡交互2ms,請求時間是毫秒級
數據庫:基本等于網絡和磁盤之和,甚至更慢
從上面的數據我們可以看出,如果你的業務流程中涉及了磁盤、網絡、數據庫等操作,那么性能就一下子降到了毫秒級。
而對于大部分開發語言來說,語言本身的運行速度至少是內存級別的
試想一下,你的整個流程中,語言本身的處理占了微妙級的時間,而一次磁盤或者網絡的時間是毫秒級時間,那么全流程來看,就算你把語言本身的處理速度提高了10倍,對整個流程來說,性能幾乎沒有影響。
例如:假設C語言全流程處理時間:10微秒(語言部分)?+??5ms(磁盤操作)?=??5.01ms
如果換成Java,那么處理時間變成:100微秒(語言部分)?+?5ms(磁盤操作)?=?5.1?ms
從這個簡單的樣例可以看出,語言本省性能的提升,對整個流程中性能提升幾乎沒有影響!!
因此,對于復雜的業務系統來說,性能的好壞是由設計來決定的,而不是由語言來決定的,更不會因為采用了面向對象而導致性能的降低!
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版