集合和原始值
Java 中的集合僅適用於物件。即 Java 中沒有 Map<int, int>
。取而代之的是,原始值需要裝箱到物件中,如 Map<Integer, Integer>
。Java 自動裝箱將實現這些集合的透明使用:
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 17); // Automatic boxing of int to Integer objects
int a = map.get(1); // Automatic unboxing.
不幸的是,這的開銷很大。HashMap<Integer, Integer>
每個條目需要大約 72 個位元組(例如,在帶有壓縮指標的 64 位 JVM 上,假設整數大於 256,並假設地圖的負載為 50%)。因為實際資料只有 8 個位元組,所以會產生巨大的開銷。此外,它需要兩個級別的間接(Map - > Entry - > Value),這是不必要的慢。
存在多個具有針對原始資料型別的優化集合的庫(在 50%負載時每個條目僅需要約 16 個位元組,即記憶體減少 4 倍,並且間接減少一個級別),當使用大量原始集合時可以產生顯著的效能優勢 Java 中的值。