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 自動裝箱效能Java
- Java 效能筆記:自動裝箱/拆箱Java筆記
- Java中的自動裝箱與自動拆箱Java
- Java的自動裝箱和拆箱Java
- 夯實Java基礎系列2:Java基本資料型別,以及自動拆裝箱裡隱藏的秘密Java資料型別
- Java自動拆箱與裝箱Java
- 夯實Java基礎系列2:Java基本資料型別,以及自動拆裝箱裡隱藏的祕密Java資料型別
- Java中的自動裝箱與拆箱Java
- 如何理解Java中的自動拆箱和自動裝箱?Java
- Java無意識自動裝箱嚴重消耗效能Java
- Java自動裝箱/拆箱 - Java那些事兒Java
- Java 效能要點:自動裝箱/ 拆箱 (Autoboxing / Unboxing)Java
- Java語法糖2:自動裝箱和自動拆箱Java
- java基本資料型別與自動轉換Java資料型別
- ERP中成本型別主要有3個基本的成本型別:型別
- 【Java】基本型別包裝類Java型別
- Java學習之自動裝箱和自動拆箱原始碼分析Java原始碼
- Java基礎-基本型別和包裝型別Java型別
- java基本型別和包裝型別的“==”和equals()方法Java型別
- 通過原始碼瞭解Java的自動裝箱拆箱原始碼Java
- 【java】JDK5的新特性→→自動裝箱和拆箱JavaJDK
- Java 包裝類和基本型別Java型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- 資料型別及拆箱裝箱資料型別
- Java的基本型別和引用型別Java型別
- 郵箱輸入實現型別自動提示功能型別
- java基本資料型別包裝類Java資料型別
- java中的內部類和自動拆裝箱Java
- Swift Talk:理解值型別Swift型別
- 【JS迷你書】基本型別之拆箱操作JS型別
- Java的基本資料型別Java資料型別
- JAVA 基本型別與 引用型別區別Java型別
- .NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- Java中基本資料型別和包裝型別有什麼區別?Java資料型別
- Java-API-基本資料型別包裝類JavaAPI資料型別
- (2)Java基本資料型別和包裝類Java資料型別
- Java資料型別自動轉換(++ ,+=)Java資料型別