Java基本型別自動裝箱的效能成本 -Coffee Talk
將整數加入集合Collection或Map中時,是直接將int原始型別加入還是變成Integer整數物件型別加入呢?這兩者有什麼區別?
JDK 1.5版引入了Java原語型別的自動裝箱。這意味著當在需要引用型別的任何地方使用基本型別時,包裝器類將自動建立。因此,在JVM的JDK 1.5版本之後,上述用例無需使用包裝器類。Java裝箱和原始型別的自動裝箱將為您處理:
int x = 10; ArrayList<E> list = new ArrayList(); list.add(10); //這是Java中的原始型別自動裝箱 |
使用Java Flight Recorder和JDK Mission Control Eclipse外掛對該程式進行快速分析會觸發紅色警告,將“原始到物件轉換”標記為有問題。自動裝箱導致效能問題。使用自動裝箱功能時,Java Mission Control顯示了垃圾回收例程會影響效能。
解決辦法是加入整數型物件Integer,如:
map.put(Integer.valueOf(i), new SnoopInt(Integer.valueOf(i))); public final class SnoopInt { final Integer id; SnoopInt(Integer id) { this.id = id; } Integer getId() { return id; } } |
進行了這些較小的更改後,再次啟動Java Flight Recorder時,Java原語型別裝箱和拆箱效能問題就消失了。垃圾回收沒有明顯增加,並且在Java Flight Recorder執行之後,Java Mission Control不會報告任何原始到物件的轉換問題。
相關文章
- 夯實Java基礎系列2:Java基本資料型別,以及自動拆裝箱裡隱藏的秘密Java資料型別
- Java中的自動裝箱與自動拆箱Java
- Java的自動裝箱和拆箱Java
- 夯實Java基礎系列2:Java基本資料型別,以及自動拆裝箱裡隱藏的祕密Java資料型別
- Java自動拆箱與裝箱Java
- 如何理解Java中的自動拆箱和自動裝箱?Java
- java基本資料型別與自動轉換Java資料型別
- 【Java】基本型別包裝類Java型別
- java基本型別和包裝型別的“==”和equals()方法Java型別
- Java基礎-基本型別和包裝型別Java型別
- Java 包裝類和基本型別Java型別
- 自動裝箱、拆箱
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 【java】JDK5的新特性→→自動裝箱和拆箱JavaJDK
- 通過原始碼瞭解Java的自動裝箱拆箱原始碼Java
- Java的基本型別和引用型別Java型別
- 資料型別及拆箱裝箱資料型別
- java中的內部類和自動拆裝箱Java
- Java的基本資料型別Java資料型別
- 【JS迷你書】基本型別之拆箱操作JS型別
- Swift Talk:理解值型別Swift型別
- Java中基本資料型別和包裝型別有什麼區別?Java資料型別
- 自學java筆記I 基本型別+轉義字元+資料型別的轉換Java筆記字元資料型別
- Java-API-基本資料型別包裝類JavaAPI資料型別
- Java基本資料型別Java資料型別
- Java 基本資料型別Java資料型別
- 你不知道的JavaScript--Item4 基本型別和基本包裝型別(引用型別)JavaScript型別
- Java資料型別自動轉換(++ ,+=)Java資料型別
- 玩家“社交成本”的型別和克服動機型別
- JS 基礎型別之裝箱操作JS型別
- java 基本型別的轉換規則Java型別
- java Atomic 基本資料型別Java資料型別
- java基礎之java的基本資料型別Java資料型別
- [譯]Kotlin中內聯類的自動裝箱和高效能探索(二)Kotlin
- Java中的基本資料型別與引用資料型別Java資料型別
- Java中的基本型別包裝類 Integer 類該怎麼使用?Java型別
- 14.Java-Arrays(類)、基本型別包裝類、Integer(類)Java型別
- 夯實Java基礎系列2:Java自動拆裝箱裡隱藏的秘密Java