更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动
Zing虛擬機文檔Understanding Java Garbage Collection(了解Java垃圾收集)
首先說明這個Zing是收費的,但是他也是優秀的,我覺得我們可以研究下他的一些思想對于怎么提高JVM,以及目前的JVM有什么缺陷是非常有幫助的。
中文版簡介:https://cn.azul.com/
?
Zing的優勢:
1)更好的性能
支持 Zing 的 Falcon JIT 編譯器是使用 LLVM 技術構建的,其可提供深入的優化。
2)無停頓執行
Azul 解決了Java 的垃圾回收問題。停止和應用程序超時、GC 停頓、停滯和抖動周旋。
3)更快速啟動
憑借 ReadyNow!? 技術,Java 應用程序啟動速度快,且能保持高速運行。
?
Zing:虛擬機
?
Zing FAQ:
https://www.azul.com/products/zing/zinqfaq/
下面是我結合谷歌翻譯后再適當修改了下的FAQ,刪掉了購買等和技術無關的部分:
什么是Zing??
Zing是一個兼容并符合Java SE規范的JVM。Zing針對Linux和x86進行了優化。Zing專為需要大內存,高事務率,一致響應時間或高持續吞吐量的任意組合的企業應用程序和工作負載而設計,是唯一能夠提供與堆大小無關的可預測響應時間的JVM。
Zing與傳統JVM在部署Java應用程序方面有何不同?
Zing是一個高度優化的 JVM和彈性運行時,它打破了傳統的Java規模障礙,并為Java應用程序,規模和吞吐量提供了數量級的改進。Zing發行版包括一個非侵入式,生產時應用程序可見性工具,稱為Zing Vision(ZVision)。
借助ZVision,IT組織首次擁有零開銷,細粒度的可見性工具,可幫助發現問題并加速解決難以捉摸的生產問題。
Zing是另一個JVM嗎?
Zing是一個更好的 JVM,它利用先進技術為主流Java應用程序提供更高的性能。我們的大多數客戶不需要巨大的Java堆或超低延遲 - 他們只是希望他們的Java應用程序可靠地運行。Zing通過Azul C4提供這些優勢 ??(Continuously Concurrent Compacting Collector)?(連續并發壓縮收集器)消除了限制所有傳統JVM可擴展性的“stop-the-world”(“全局停頓”)。由于單實例可以擴展到幾千兆字節到多達8TB內存,因此Zing可以顯著減少支持企業應用程序或多租戶SaaS / PaaS解決方案所需的實例總數,從而簡化部署,顯著提高響應時間一致性并降低運營支出和資本支出。Zing還附帶ReadyNow!解決Java預熱問題的技術,允許您的應用程序快速啟動并保持快速。
Zing如何提供比其他JVM更好的性能?
Zing消除了“stop-the-world”(“全局停頓”)式的垃圾收集,其他JVM限制了這樣的可擴展性,因此每個Zing實例可以擴展到8TB的堆內存。Zing還使用高度優化的即時(JIT)編譯器,默認使用分層編譯。
傳統的Java熱身問題由Zing的ReadyNow解決!允許應用程序快速啟動并保持快速運行的技術,允許運營團隊在運行之間保存和重用累積的編譯器優化,并避免在工作負載或條件發生變化時可能減慢處理速度的去優化停頓。
什么是Zing Vision?
Zing Vision是一個安裝在Zing里的零開銷,永遠在線的線上監控,診斷和調整工具。
Zing總是收集數據作為其必須完成的工作的輔助任務,這使得系統管理員可以通過Zing Vision利用這些信息,而不必擔心影響正在運行的應用程序。
Zing如何解決Java熱身問題(Java warm up)?
Zing使用Azul創新的ReadyNow!? 技術來解決熱身問題。ReadyNow專為低延遲系統而設計!允許Java應用程序在啟動時實現最佳性能和一致性,并最大限度地減少負載條件發生變化時可能發生的破壞優化。
為什么要介紹Zing的名為“Falcon”的新編譯器?
Falcon JIT編譯器的開發是為了確保Java開發人員和基于Java的企業能夠從當今的服務器硬件中獲取最大性能。
Falcon JIT編譯器基于什么技術?
Falcon JIT編譯器基于LLVM技術,這是一個受歡迎的編譯器基礎設施項目,得到了一流大學和包括Adobe,Apple,Google,NVIDIA和Intel在內的數十家企業貢獻者的積極參與。
Falcon比C2更快嗎?
是。
Falcon支持哪些版本的Java?
Falcon適用于使用Java SE 7和Java SE 8構建的應用程序。作為功能預覽,Falcon還可以與Java SE 10和11一起使用(即將推出)
Zing如何支持大堆大小以及它是如何彈性的?
Zing允許Java應用程序利用他們需要執行的任何數量的內存,僅受系統中物理內存或虛擬機管理程序可識別的數量的限制。
由于Zing獨特的垃圾收集器,基于Azul的開創性C4 (連續并發壓縮收集器)技術,GC暫停與JVM堆的大小無關,并且不限制應用程序可伸縮性。
此外,Zing還包括一項專利創新的“內存池”(即內存儲備),允許JVM根據實時需求動態增加內存占用量; 當需求減少時,Zing將此內存返回給系統。
此內存預留不僅可確保在高負載下保持一致的性能,而且可以充當因錯誤或編碼錯誤而遇到“內存泄漏”的JVM的緊急內存。
什么是Zing ReadyNow!??
ReadyNow!是Zing運行時內置的技術,可以很好地解決Java熱身問題。
他有兩個主要特點:
首先,它使運營團隊能夠跨運行保存和重用編譯器優化。
第二,ReadyNow!為開發人員提供強大的API和編譯器指令,以預編譯常用的代碼或必須快速的方法,即使它們不經常被調用。
Zing如何提供無間斷操作?
Zing默認使用Azul C4垃圾收集器。無論堆大小如何,C4收集器都在不斷地進行壓縮,并且永遠不會使用“stop-the-world”(“全局停頓”)的暫停來進行垃圾收集。
什么是C4垃圾收集器?
該C4(連續并行壓縮收集器) ?是一個更新的代執行Azul Pauseless GC算法,是Zing的默認垃圾收集器。
Zing能幫助解決數據庫爭用嗎?
是。使用較少的應用程序實例,您的數據庫可以看到更少的連接和更少的爭用
Zing是否已經使用各種Java應用程序進行了測試?
是。對于每個版本,我們測試各種應用程序堆棧(包括Wildfly,Active MQ,Cassandra,WebLogic Server,WebSphere Application Server,JBoss和Tomcat),以及其他開源軟件和第三方應用程序。?
企業主為什么要關心Zing?
Java應用程序通常是關鍵業務和關鍵任務。影響收入和使用的性能和可伸縮性問題通常不是由應用程序,數據庫或網絡引起的,而是通常與JVM的選擇有關。
通過選擇Zing,您可以消除意外長時間的用戶等待時間和內存不足崩潰,從而捕獲收入和客戶的損失,并在需求突然出現時提供一致的用戶體驗。
?
Azul C4垃圾收集器
大多數垃圾收集器的主要缺點是需要長時間的應用程序暫停。這些暫停是不可避免的要求壓縮堆以釋放空間的結果。收集器使用不同的策略來延遲這些事件,但是除了使用連續并發壓縮收集器的Azul C4垃圾收集器之外,所有商業可用收集器都不可避免地壓縮。
C4(連續并發壓縮收集器)是Azul Pauseless GC算法是Zing?的默認收集器。 C4通過支持同時生成并發來區別于其他世代垃圾收集器:使用可以同時且獨立活動的并發(非停頓)機制收集不同代。與其他算法不同,它不是“大部分”并發,而是完全并發,所以它永遠不會回到?stop-the-world?的壓縮。
垃圾收集器摘要如下。有關術語的更多信息以及有關收集器的更多詳細信息,請閱讀Understanding Java GC白皮書。
垃圾收集(GC)是Java平臺上應用程序行為的一個組成部分。Java開發人員可以通過了解GC的工作原理以及更好地選擇垃圾收集器來提高應用程序性能,可伸縮性和可靠性。
更多資源:
關于Azul C4收集器的技術白皮書?
*請注意,使用IBM的J9和Oracle的JRockit,您可以選擇使用單代或2代垃圾收集器
ReadyNow!? - 啟動更快,保持快速
解決Java熱身問題?
專為基于Java的應用程序而設計,必須滿足特定的服務級別
幫助開發人員管理Java的運行時去優化
減少CPU資源消耗?
允許保存和重復使用累積的編譯器優化配置文件
為開發人員提供對Java編譯的更多控制
減少因合成測試或“假”數據的需要而導致的運行預熱風險
在市場開放等關鍵時刻確保一致的峰值性能
允許Java快速啟動并保持快速
要了解有關ReadyNow的更多信息!?特性和功能,下載 數據表
了解更多有關Azul的ReadyNow的信息!?技術在?InfoQ采訪阿祖爾首席技術:Azul ReadyNow!尋求消除JVM熱身
Java“熱身”問題的背后:
基于Java的系統在運行編譯和優化代碼時可提供出色的性能。但是,JVM需要時間來“預熱”或優化常用代碼,因此應用程序可以以最快的速度運行。?
為什么會這樣? Java旨在快速啟動,然后根據實際使用情況提高性能。JVM的即時(JIT)編譯器(如Zing的Falcon編譯器)依賴于描述應用程序的哪些部分被稱為最多(“熱”代碼)的配置文件數據。
JIT編譯允許JVM優化性能,但這可能需要時間。在資本市場等用例中,通常系統會“熱身”以提供最佳性能。雖然Java應用程序通常需要一段時間才能啟動,但是當打開鈴聲響起時,它必須準備好進行全面優化。
當前的Java預熱策略:
需要最佳Java性能和一致性的公司(如金融服務公司)已經嘗試了多種方法來加熱JVM,例如模擬測試數據,“虛假”交易,甚至是市場開放時的小型實時交易。
在其他問題中,這些策略可能會引入操作風險,即“虛假”數據可能會泄漏到“真實”交易日,或者實際情況可能與用于預熱JVM的方案不同。有效的策略需要復制真正的端到端行為。
如果條件發生變化,Java會恢復為已解釋的代碼,這種情況稱為“去優化”,這會使性能降低到爬行速度,直到重新編譯和重新優化關鍵方法。Azul的ReadyNow!技術提供兩個關鍵功能。首先是運營團隊能夠跨運行保存和重用累積的優化配置文件。第二個是一組強大的API和編譯器指令,使開發人員能夠更好地控制JVM去優化的時間和影響。
解決方案:ReadyNow!?AzulSystems的技術:
好了!?是用于Java的Zing運行時內置的技術。它允許基本系統在交易日開始時實現最佳性能和一致性。常見的熱身技術有時會針對錯誤的條件進行優化,Zing的ReadyNow!
當“真實”交易與用于預熱的配置文件不同時,技術可以防止大多數去優化。有了ReadyNow!運營團隊可以從一天或一組市場條件中節省累積的優化,以便以后重復使用。
此外,開發人員可以更好地控制Java編譯,包括API,配置指令,策略控制以及對“未實現”代碼處理的改進。ReadyNow專為低延遲系統而設計!技術使Java應用程序從開幕式開始就能快速上市 - 并且它們保持快速。
?
垃圾收集(GC)調整
為什么垃圾收集(GC)調整?
大多數垃圾收集器必須停止應用程序處理?(“stop-the-world”)以確定哪些對象仍在使用中,這些對象可以被垃圾收集以及對內存堆進行碎片整理和壓縮。暫停時間隨內存堆大小線性增加,因此大堆可能導致用戶明顯延遲和應用程序性能不佳。
GC調整 - 一些基礎知識
調整垃圾收集所花費的大部分時間都是為了延遲壓縮。由于大多數物體都很年輕,因此可以在年輕一代上進行垃圾收集一段時間,但最終需要回收舊的沒用的對象。可以通過跟蹤舊的gen對象被刪除的位置并使用釋放的內存來進一步延遲完整的GC。但是,在某些時候,這個空間將變得支離破碎,需要回收。您可以嘗試通過調整盡可能地延遲垃圾收集,但實際情況是您不能永遠延遲它。
消除垃圾收集暫停和GC調整的需要
Zing虛擬機使用 Azul創新的C4收集器,可提高應用程序性能,無需進行大多數GC調整。使用Zing,應用程序可在堆和GC設置的廣泛,平穩操作范圍內始終如一地執行。另一個關鍵的好處是“你測試的是你得到的東西”,因此生產中的性能與測試的性能相匹配。
C4是一種高度并發,一致的算法,能夠同時壓縮Java堆,并允許應用程序在執行內存重映射時繼續執行。其他JVM需要“停止世界”暫停才能完全壓縮堆。請參閱下面的Zing GPGC和HotSpot JVM CMS的比較。
HotSpot JVM CMS與Zing Pauseless垃圾收集的比較:
Hotspot JVM? CMS
年輕代:會停頓。
年老代:大部分是并發的,非壓縮的
? ? ? ├主要是并發標記
? ? ? ?? ? ? ├在mutator運行時同時標記,
? ? ? ? ? ? ? ├跟蹤卡片標記中的突變,
? ? ? ? ? ? ? ├重新訪問變異卡片(根據需要重復),
? ? ? ? ? ? ? └停頓Stop-the-world以趕上突變,ref處理等。
? ? ? ?├并發打掃
? ? ? ?└不壓縮(維護空閑列表,不移動對象)
FGC:停頓Stop-the-world
而Azul? PGC 總之是并發,壓縮,且沒有停頓的!
Java堆大小
Java堆是分配給在JVM中運行的應用程序的內存量。堆內存中的對象可以在線程之間共享。
由于垃圾收集暫停,傳統JVM中Java堆大小的實際限制通常約為2-8 GB。許多類型的應用程序都可以從非常大的堆中受益,例如內存計算,NoSQL數據庫,大數據 應用程序,分析,Web個性化和電子商務。
一個100GB的堆不會在典型的JVM上崩潰,它會一次定期暫停幾分鐘。這限制了應用程序性能和可伸縮性,并阻止Java應用程序使用當今商用服務器的全部資源。
如果可以消除相關的性能問題,非常大的堆大小通常非常實用。Azul的Zing?是解決Java的垃圾回收問題,并允許堆多達8TB沒有性能損失的第一個JVM。
更大的Java內存堆:
允許創建更多對象;
填充需要更長時間;
允許應用程序在垃圾收集(GC)事件之間運行更長時間。
較小的Java內存堆:
保留較少的對象;
填寫更快;
是否更頻繁地收集垃圾(但暫停時間較短);
可能導致內存不足錯誤。
2-8GB的內存堆是否足以滿足大多數Java應用程序的需求?
我們已經找到了大量證據表明對更多堆的需求被壓抑了:
機器內“橫向尺度”的常見用途
使用“外部”內存和不斷增長的數據集(更大的數據庫以及使用外部數據緩存,如memcached,JCache和JavaSpaces)
持續研究永無止境的分配問題
問題出在軟件堆棧中,它會對每個實例的內存施加人為約束。
GC暫停時間是實例大小的唯一限制因素,正如我們在實踐中發現的那樣,即使是廣泛的垃圾收集(GC)調整也不會讓它消失。
一旦你解決了GC,你就解決了這個問題。Azul的創新C4垃圾收集算法是完全并發的,消除了非常大堆的性能影響。
?
JVM調優
JVM調優:主要指內存堆大小和垃圾收集(GC)調優。?
如果您正在尋找有關Zing調整標志的特定信息,請查看ZVM命令行選項下的在線Zing文檔。
內存堆大小
對于大多數JVM,調整堆大小需要分析應用程序如何使用內存,更改參數和重新分析。應用程序需要盡可能靠近生產負載運行。這是特別難以做到的,因為在實驗室中不會看到一些現實中出現的負載。大多數JVM使您能夠設置初始堆大小(-Xms)和最大堆大小(-Xmx),但有些也允許其他參數,如大頁。如果堆大小設置得太大,垃圾收集暫停會變得太長; 如果堆大小設置得太小,應用程序將拋出內存不足錯誤并可能崩潰。因此,內存和GC調優是影響應用程序性能的密切相關主題。
Zing?消除了大部分JVM調整的需要。Zing支持堆內存的“銀行系統” (?‘banking system’ ),允許運行時實例根據需要可靠地增長和縮小內存堆。Zing可以以多個GB /秒的速度在實例之間轉移物理資源。不必將內存堆調整“完全正確”可以節省大量時間。您可以專注于為業務增加更多價值并啟動新計劃,而不是花時間調整和重新調整Java基礎架構以修復生產故障。
此外,該平臺還包括Zing Vision,一種零開銷,始終在線監控,調整和可視性工具。使用Zing Vision,您可以快速啟動應用程序,從而加快產品上市速度并隨時調整生產。下面是傳統JVM和Zing的實際JVM調整參數的示例。
?介紹Falcon JIT編譯器
Zing的Falcon JIT編譯器
在將近二十年之后,Java有了一個新的實時(JIT)編譯器,它只能在Zing運行時中用于Java。 Azul Systems構建了Falcon JIT編譯器,以確保Java開發人員和基于Java的企業能夠從當今的服務器硬件中獲取最大性能。
Falcon JIT編譯器與Azul的無暫停垃圾收集技術以及ReadyNow完全集成!技術,解決了延遲敏感應用程序中Java的預熱問題。
LLVM ?- Falcon JIT背后的技術
Falcon JIT編譯器基于LLVM技術,這是一個受歡迎的編譯器基礎設施項目,得到了一流大學和包括Adobe,Apple,Google,NVIDIA和Intel在內的數十家企業貢獻者的積極參與。
今天,LLVM被用于Java和JVM之外的各種編程語言和框架,包括Swift和Rust等新平臺以及許多其他平臺,包括C / C ++,Objective-C,Swift,Clang,OpenCL,CUDA等等。
LLVM被認為是最先進的編譯器技術,LLVM社區不斷采用新的優化技術并支持新的處理器指令集和硬件平臺。
使用Zing的新Falcon JIT編譯器運行時,Java工作負載的性能優勢具有顯著的業務優勢:
更好的應用程序服務級別指標:減少延遲,減少超時,提高一致性;
更好的客戶體驗:即使在不可預測的負載下也能可靠地實現客戶期望,提高客戶滿意度;
降低運營成本:減少內存占用要求,提高云/ AWS部署中類似大小的實例的承載能力;
降低開發成本:實現所需性能,一致性和規模所需的工程時間更短.
問:Zing什么時候和Falcon一起發貨?
答:Falcon JIT已與Zing一起運行了幾個月。從版本17.03開始,Falcon是Zing的默認JIT編譯器,取代了傳統的C2編譯器。
問:Falcon JIT比C2更快嗎?
答:是的。
問:Zing還支持C2嗎?
答:是的,可以通過在JVM啟動時指定標志來使用C2。
問:我是否需要重新編譯現有的應用程序以使用Falcon?
答:不用。
問:Falcon支持哪些版本的Java?
答:Falcon適用于使用Java SE 7和Java SE 8構建的應用程序。
問:Falcon會支持Java 9嗎?
答:是的,在Zing的未來版本中。
總結
以上是生活随笔為你收集整理的更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海信85寸xdr如何辨真伪?
- 下一篇: 泰拉瑞亚蘑菇人的房子怎么造?