JVM神祕的AllocatePrefetch選項:它們實際上是做什麼的?- opsian
AllocatePrefetch是JVM的分配預取選項。所有Java垃圾收集器都使用稱為緩衝分配的技術,通過將所需的分配大小新增到當前分配指標(緩衝位),並檢查該分配大小是否超出了分配指標指向的區域限制,以此來執行分配。
在並行執行緒分配的環境中執行時,這會帶來一種複雜性。簡單地讓所有執行緒競爭使用諸如Fetch-And-Add或Compare-And-Swap之類的原子指令來分配指標將非常低效。Java垃圾收集器使用的解決此問題的方法是執行緒本地分配緩衝區(TLAB)。
TLAB是一個能夠處理許多分配的緩衝區,並由執行緒擁有。執行緒向垃圾收集器的分配器請求這些緩衝區,然後使用它們將新物件分配到其中。由於緩衝區是執行緒本地的,並且緩衝區內的分配是單執行緒的,因此可以使用快速緩衝分配方法。JVM動態選擇TLAB的大小,將較小的TLAB分配給分配很少的執行緒,將較大的TLAB分配給分配更頻繁的執行緒。
現在您瞭解了分配的工作原理,預取從何而來?要了解預取,您首先需要了解一些有關CPU快取的組織方式。為了保持一致的記憶體檢視,所有快取都位於匯流排上,並遵守快取一致性協議。該協議使快取記憶體可以共享資料。
在理想情況下,使用AllocatePrefetch選項,分配完全適合快取記憶體行的物件時,分配效能提高了近40%。在這裡,預取可確保新分配的記憶體位於快取之一中,並允許儲存緩衝區更快地耗盡。
如果生產環節的效能瓶頸涉及非常緊密的迴圈中的大量分配,則可能應該採取這種選項。接下來,確定要執行的物件分配的型別-它們的大小和相對頻率。選擇分配預取設定,以確保最頻繁分配的物件被完全預取。最後,在生產環境中對照現有版本測試新版本。使用指標來確定效能是否有所提高。
點選標題見原文
相關文章
- 什麼是量子霸權?我們如何才能實現它?
- 什麼是Yottachain和YTA幣,它們是什麼關係?AI
- JVM的ServerSocket是怎麼實現的(上)JVMServer
- JavaScript 的裝飾器:它們是什麼及如何使用JavaScript
- 什麼是中斷?什麼是異常?它們有何區別?
- 你都用過SpringCloud的哪些元件,它們的原理是什麼?SpringGCCloud元件
- 在Linux中,什麼是守護程序,它們是如何工作的?Linux
- CISC和RISC是什麼?它們的特點和區別?
- 交換機是什麼,它的工作原理是什麼
- Java是什麼_Java是做什麼的?Java
- CSRF與SSRF是什麼?它們之間有什麼區別?
- web前端是做什麼的?UI設計又是做什麼的?看完別選錯行!Web前端UI
- 什麼是資料標註,它的用途是什麼?
- 一個故事教你看懂什麼是數字證書,它的原理是什麼?它的作用是什麼?
- Python和Go是什麼?它們之間有什麼區別?PythonGo
- JavaEE是做什麼的?Java
- 請教大家元件和模組有什麼區別,它們的概念分別是什麼?元件
- HDFS 01 - HDFS是什麼?它的適用場景有哪些?它的架構是什麼?架構
- 在Linux中,什麼是檔案許可權?它們是如何工作的?Linux
- 什麼是海外伺服器?它的優點是什麼?伺服器
- 進擊的WebRTC:我們為什麼需要它?Web
- Typescript 中的泛型是什麼 - 為什麼使用它們,它們如何與程式碼示例一起使用TypeScript泛型
- 快照是什麼?揭祕儲存快照的實現
- 什麼是SOCKS5代理 它的原理是什麼
- java中有哪幾種引用?它們的含義和區別是什麼Java
- python和C語言哪個難?它們的區別是什麼?PythonC語言
- 11.Dart中最神祕的Mixin有什麼用?Dart
- 究竟什麼是專案管理?它的主要內容是什麼呢?專案管理
- 網際網路揭祕:AI 的神話與現實AI
- JVM篇-01.什麼是JVMJVM
- 為什麼Jupyter是資料科學家們實戰工具的首選?資料科學
- 我們的口號是什麼?
- php-fpm是什麼, 以及它的演化PHP
- 黑炫酷的監控介面,實際上是用了什麼開源工具?開源工具
- 如何正確選擇iOS簽名,它們有什麼區別iOS
- 全鏈路灰度在資料庫上我們是怎麼做的?資料庫
- 什麼是 SRE?它和 DevOps 是怎麼關聯的?dev
- Tomcat的配置檔案中有哪些關鍵的配置項,它們分別有什麼作用?Tomcat