1.JAVA開發(fā)工具集(JDK)
■ 設計了一組通用用途的類
■ 設計的質(zhì)量和實現(xiàn)多樣化
一 有些部分設計和實現(xiàn)得很好
一 而有些部分...
■ 你可以訪問JDK的源代碼
一 %JAVA_HOME%\src.jar
一 不要直接修改源代碼,但如果識別出一個JDK的方法是一個 瓶頸 ,檢查源代碼以理解為什么
2.數(shù)據(jù)結構和算法
■ 推薦JAVA集合框架
一 指南 java.sun. com /docs/books/tutorial/collections
■ 設計得很好的基本的數(shù)據(jù)結構和算法
3.集合框架
■ 調(diào)換實現(xiàn)達到不同的性能特性
4.集合框架:接口與具體類
■ 面向接口編程,而不是具體類
一 特別是對于方法參數(shù)
一 在性能優(yōu)化時更容易改變實現(xiàn)
5.集合框架:具體類
■ 當一個集合創(chuàng)建時要消除動態(tài)增長的代價,為其指定一個實際初始大小
一些具體類(如:ArrayList)的動態(tài)增長的代價是很高的
■ 在適當?shù)牡胤娇紤]重用集合對象
一 調(diào)用集合的clear()方法清楚它的所有元素
■ Object .hashCode()
一 選擇一個算法保證哈希表的統(tǒng)一分配
一 覆蓋繼承的Object.hashCode()方法, 默認的實現(xiàn)返回的是對象引用值,沒有展示一個一致的分配
一 從不返回一個常量
一 非常小心地改變鍵的值的底層狀態(tài)
6.集合框架:實現(xiàn)數(shù)據(jù)結構
■ 如果一定要實現(xiàn)自己的數(shù)據(jù)結構,依賴于集合接口實現(xiàn)你的類
一 可以使用java.util.Collections工具方法恰當?shù)貙崿F(xiàn)你的具體數(shù)據(jù)結構
■ 擴大數(shù)據(jù)結構集合,你可以插入其它的開發(fā)成果
7.集合框架:基礎算法
■ Java .util.Collections類里的算法
一 sort(…..)
以升序重新排列List的元素
輕微地優(yōu)化MergeSort-O(nlog(n))的版本
一 binarySearch(….)
在一個已排序的List里查找指定的元素
一 極限值
min(…) max(….)
一 其它
reverse(….),fill(….), copy(…)
8.數(shù)組
■ 數(shù)組與ArrayList與Vector
一 數(shù)組的速度大約比ArrayList快十倍
一 數(shù)組的速度大約比Vector快40倍
一 ArrayList的速度大約比Vevtor快3-4倍
■ 當拷貝一個數(shù)組的元素到另一個數(shù)組時,使用 System .arrycopy(…)
9.數(shù)組:基礎算法
■ JAVA2的java.util.Arrays類提供了一組重載方法,為基礎數(shù)組實現(xiàn)了最佳化的算法(與java.util.Collections類相似)
■ Java .util.Arrays類的里的算法
一 binarySearch(…)
一 equals(…)
一 fill(…)
一 sort(…)
?
■ 文本格式化類:
一 java. text .DateFaormat
一 java.text.NumberFaormat
一 java.text.MessageFaormat
可能非常慢
■ 例如:第一次調(diào)用DateFormat.geInstance()創(chuàng)建超過12000個對象
■ 每次調(diào)用DateFormat. format 創(chuàng)建13個對象,加上第一次調(diào)用時的那次
一 重用同一個DateFormat實例而不是重復調(diào)用DateFormat.getInstance是很值得做的
■ 其它的格式化類有相似的特點
11.XML處理:SAX
■ 處理XML文檔的低級,事件驅動庫
■ 最好的選擇,如果:
一 你需要以線性的方式遍歷整個文檔
一 你只需要查看幾項
一 內(nèi)存效率是一個問題
12.XML處理
■ 試著在你的應用程序里消除處理特定XML對象
■ 通過一個RMI調(diào)用傳遞DOM樹,結果會使整個java對象樹序列化。。。通常會4倍甚至更多的空間
4.Buffered I/O
■ I/O類默認不緩沖
■ 為你的I/O流使用緩沖的包裝器
BufferedOutputStream
BufferedInputStream
BufferedReader
BufferedWriter
■ 嘗試在構造方法中使用緩沖大小參數(shù)
一 BufferedInputStream:默認2048個字節(jié)(JDK1.4.1)
一 BufferedReader:默認8192個字符(JDK1.4.1)
13.流與Readers
■ 在java里有兩個并行的I/O接口
Reader和Writer
一 BufferedInputStream:字符序列(16-bit)
InputStream和OutputStream
一 字節(jié)序列(8-bit)
■ 處理基于文本的文件,Readers&Writers更快
更快的幅度達50%
參考O'Reilly的"java Performance Tuning"第八章
14 .新I/O
■ 在JDK1.4或更高版本,java.nio包給出了更多I/O選項
一 正則表達式匹配
一 內(nèi)存映射緩存
一 非 中斷 I/O
■ 這些能提供更高的I/O性能
15.序列化
■ 使一個對象"變平"允許使它流化成一個文件(為了 存儲 )或者網(wǎng)絡連接(為了傳輸)
一 添加Serializeable接口標記你的類
一 通過ObjectInputStream/ObjectOutputStream
■ 序列化被遠程方法調(diào)用廣泛使用
■ 序列化可能會非常昂貴
一 當你序列化一個對象時,這個對象可達的每個對象都會被序列化,可能會有非常多的對象
一 除了內(nèi)部虛擬機程序,還會大量使用反射
一 序列化是非常繁冗的
只有一個 int 數(shù)據(jù)的類占用37個字節(jié)
序列化的對象包括了每個類成員及其值的全限定名
一 速度是不對稱的,反序列化比序列化速度更慢
16.序列化:transient關鍵字
■ 可以重新定義序列化動作
一 使用transient關鍵字指出不需要在序列化流中包含的成員變量
Private transient String name;
一 這讓你可以指出對象里不重要的成員變量或者當對象讀入內(nèi)存時可以重新計算的成員變量
17 .序列化:Externalizable接口
■ 消除序列化負載,實現(xiàn)Externalizable接口而不是Serializable
Public void readExternal(ObjectInput out)
Public void writerExternal(ObjectOutput out)
■ 程序員完全要負責:
一 管理序列化內(nèi)容
一 調(diào)用readExternal()/wirteExternal()方法序列化對象
18.Externalizable
?
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
