java效能優化方案5——使用原始型別和棧
5、使用原始型別和棧
之前介紹了來自 jOOQ的例子中使用了大量的泛型,導致的結果是使用了 byte、 short、 int 和 long 的包裝類。但至少泛型在Java 10或者Valhalla專案中被專門化之前,不應該成為程式碼的限制。因為可以通過下面的方法來進行替換:
//儲存在堆上
Integer i = 817598;
……如果這樣寫的話:
// 儲存在棧上
int i = 817598;
在使用陣列時情況可能會變得更加糟糕:
//在堆上生成了三個物件
Integer[] i = { 1337, 424242 };
……如果這樣寫的話:
// 僅在堆上生成了一個物件
int[] i = { 1337, 424242 };
小結
當我們處於 N.O.P.E. 分支的深處時,應該極力避免使用包裝類。這樣做的壞處是給GC帶來了很大的壓力。GC將會為清除包裝類生成的物件而忙得不可開交。
所以一個有效的優化方法是使用基本資料型別、定長陣列,並用一系列分割變數來標識物件在陣列中所處的位置。
遵循LGPL協議的 trove4j 是一個Java集合類庫,它為我們提供了優於整形陣列 int[] 更好的效能實現。
例外
下面的情況對這條規則例外:因為 boolean 和 byte 型別不足以讓JDK為其提供快取方法。我們可以這樣寫:
Boolean a1 = true; // … syntax sugar for:
Boolean a2 = Boolean.valueOf(true);
Byte b1 = (byte) 123; // … syntax sugar for:
Byte b2 = Byte.valueOf((byte) 123);
其它整數基本型別也有類似情況,比如 char、short、int、long。
不要在呼叫構造方法時將這些整型基本型別自動裝箱或者呼叫 TheType.valueOf() 方法。
也不要在包裝類上呼叫構造方法,除非你想得到一個不在堆上建立的例項。
非堆儲存
當然了,如果你還想體驗下堆外函式庫的話,儘管這可能參雜著不少戰略決策,而並非最樂觀的本地方案。
相關文章
- java效能優化方案——使用entrySet()Java優化
- java效能優化方案1——使用StringBuilderJava優化UI
- java效能優化方案3——不要使用iterator()方法Java優化
- java效能優化方案9——優化自定義hasCode()方法和equals()方法Java優化
- java效能優化方案2——避免使用正規表示式Java優化
- Java效能優化的5個技巧Java優化
- [譯]Effective Kotlin系列之考慮使用原始型別的陣列優化效能(五)Kotlin型別陣列優化
- Java toString的效能優化方案比較Java優化
- MySQL 效能優化方案MySql優化
- java效能優化Java優化
- 前端效能優化方案索引前端優化索引
- java效能優化方案10——考慮使用set而並非單個元素Java優化
- Java™ 教程(泛型原始型別)Java泛型型別
- 人人都能掌握的Java服務端效能優化方案Java服務端優化
- MySQL5:效能優化MySql優化
- 前端開發效能優化方案前端優化
- 微信小程式效能優化方案微信小程式優化
- React效能優化方案之PureRenderMixinReact優化
- 高效能MySQL (一):Schema與資料型別優化MySql資料型別優化
- mongodb之使用explain和hint效能分析和優化MongoDBAI優化
- java堆和棧的區別Java
- Webpack 效能優化 (一)(使用別名做重定向)Web優化
- JAVA效能優化思路探究Java優化
- 【Java效能優化思路方向】Java優化
- Java效能優化技巧集合Java優化
- CSAPP 5 - 優化程式效能APP優化
- Java GC 專家系列5:Java應用效能優化的原則JavaGC優化
- Java列舉型別的使用和原理Java型別
- [java][效能優化]java高階開發必會的50個效能優化Java優化
- React效能優化方案之PureComponentReact優化
- Oracle效能優化使用度量和預警Oracle優化
- Java的基本型別和引用型別Java型別
- Java中堆和棧的區別Java
- 怎麼做好Java效能優化Java優化
- 11個原始碼優化和分析的Java工具原始碼優化Java
- 相親交友原始碼前端效能優化,通常使用哪些手段?原始碼前端優化
- Java中的引用型別和使用場景Java型別
- 高效能MySQL第四章 Schema與資料型別優化 VARCHAR和CHARMySql資料型別優化