Java Colllection的迭代器兩種失敗模式的優缺點
Java 中的迭代器iterators是一種幫助開發人員避免執行時異常的簡單機制。讓我們探索快速失敗和安全失敗迭代器之間的區別。
Java 中的迭代器通常期望對它們迴圈遍歷的資料結構進行獨佔訪問。如果另一個執行緒在迭代器處理物件時嘗試修改物件集合,則會丟擲 ConcurrentModificationException。由於與管理任意排程的執行緒相關的複雜性,對 ConcurrentModificationException 進行故障排除可能很困難。幸運的是,Java 提供了一種簡單的機制來幫助開發人員避免這種異常。
兩種失敗模式
Java 迭代器分為兩個獨立的陣營失敗模式:fail-fast 和fail-safe:
fail-fast快速失敗是引發 ConcurrentModificationException 的原因;而fail-safe故障安全的迭代器不會丟擲這個異常。當然,決定使用fail-safe故障安全迭代器需要更多的考慮,而不僅僅是避免執行時異常的願望。
ArrayList 和 HashMap 類具有fail-fast快速失敗的迭代器;CopyOnWriteArrayList 和 ConcurrentHashMap 類使用fail-safe故障安全迭代器。
故障安全迭代器的好處
當感興趣的集合發生結構變化時,故障安全迭代器不會丟擲異常,因為它們與克隆一起工作,而不是集合本身。因此,故障安全迭代器會忽略底層集合發生的更改。
故障安全迭代器提供的主要好處是它們最大限度地減少了丟擲異常的可能性。但這種好處是有代價的,其中之一是增加了記憶體需求。任何時候JVM克隆物件時,都需要額外的記憶體空間。對於大型集合,記憶體佔用量可能很大。
故障安全迭代器的缺點
如果 JVM 分配和釋放越來越多的記憶體,垃圾收集例程將不得不更頻繁地執行。這將增加 CPU 負載,觸發 stop-the-world 事件並降低整體應用程式效能。
另一個缺點是它提供的結果可能與底層集合不同步。畢竟,克隆不會反映在進行克隆後底層集合發生的任何更改。如果您的應用程式不能接受這種不一致,則不應使用故障安全迭代器。
兩者比較
如果目標是避免異常,系統資源充足,並且在迭代器執行時對底層集合類的更新不會對應用程式的業務需求產生負面影響,那麼故障安全迭代器是一個明智的選擇。否則,堅持使用快速失敗的迭代器。
相關文章
- Redis持久化的兩種方式的優缺點介紹Redis持久化
- Java單例模式:缺點和優點Java單例模式
- 【Redis】四種部署模式的介紹及其優缺點Redis模式
- 單例模式的五種實現方式及優缺點單例模式
- Java裡連線字串的幾種方式以及優缺點Java字串
- 雲伺服器的優缺點伺服器
- 代理伺服器的優缺點伺服器
- 非易失性儲存器MRAM的兩大優點
- Java的快速失敗和安全失敗Java
- js建立物件的各種方法以及優缺點JS物件
- JavaScript繼承的多種方式和優缺點JavaScript繼承
- Docker的優缺點Docker
- 常見的三種代理IP協議的優缺點協議
- 簡單介紹常見的三種架構設計模式及其優缺點!架構設計模式
- 伺服器端渲染SSR的優缺點?伺服器
- DHCP伺服器的優缺點簡介伺服器
- 機櫃的種類和優缺點是什麼
- 自學IT和接受IT培訓兩者的優缺點分析
- 遞迴與迭代的聯絡以及優缺點(以c++為例)遞迴C++
- 機器學習13種演算法的優缺點,你都知道哪些?機器學習演算法
- 5種常用的機器學習模型及其優缺點,都在這裡了機器學習模型
- 一文掌握5種常用的機器學習模型及其優缺點機器學習模型
- 內聯的優缺點
- 繼承的優缺點繼承
- MySQL索引的優缺點MySql索引
- 非易失性儲存器Flash和EEPROM之間的差異與優缺點
- 【知識分享】DNS伺服器的優缺點DNS伺服器
- 虛擬伺服器的優缺點有哪些?伺服器
- 節點快取的優缺點快取
- MyBatis的優缺點以及特點MyBatis
- 繼承的優點和缺點繼承
- 五大 JAVA Web 框架的優缺點對比JavaWeb框架
- 物聯網常見的十種定位技術的優缺點
- 16.java設計模式之迭代器模式Java設計模式
- 關於 Cookie的優缺點Cookie
- HTTP和RPC的優缺點HTTPRPC
- 閉包的概念?優缺點?
- Base64 的優缺點