日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

system.gc 性能_使用这些先进的GC技术提高应用程序性能

發(fā)布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 system.gc 性能_使用这些先进的GC技术提高应用程序性能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

system.gc 性能

應用程序性能是我們關注的重點,垃圾收集優(yōu)化是取得小而有意義的進步的好地方

自動化垃圾收集(與JIT HotSpot編譯器一起)是JVM中最先進,最有價值的組件之一,但是許多開發(fā)人員和工程師對垃圾收集(GC),其工作方式以及如何影響應用程序性能的了解都很少。 。

首先,GC還能做什么? 垃圾收集是堆中對象的內(nèi)存管理過程。 將對象分配給堆時,它們會經(jīng)歷幾個收集階段–通常相當快,因為??堆中的大多數(shù)對象的壽命都很短。

垃圾收集事件包含三個階段-標記,刪除和復制/壓縮。 在第一階段,GC遍歷堆,并將所有內(nèi)容標記為活動(引用)對象,未引用對象或可用內(nèi)存空間。 然后刪除未引用的對象,并壓縮剩余的對象。 在分代的垃圾收集中,對象“老化”并通過生活中的3個空間(伊甸園,幸存者空間和保有權(quán)(舊)空間)得到提升。 這種移動也作為壓實階段的一部分發(fā)生。

但是足夠了,讓我們進入有趣的部分!

了解Java中的垃圾回收(GC)

自動化GC的一大優(yōu)點是,開發(fā)人員實際上不需要了解其工作原理。 不幸的是,這意味著許多開發(fā)人員不了解其工作原理。 了解垃圾收集和許多可用的GC,有點像了解Linux CLI命令。 從技術上講,您并不需要使用它們,但是了解和使用它們會對您的生產(chǎn)率產(chǎn)生重大影響。

就像CLI命令一樣,這里有絕對的基礎知識。 ls命令查看父文件夾中的文件夾列表, mv將文件從一個位置移動到另一個位置,等等。在GC中,這些類型的命令等同于知道有多個GC可供選擇,并且GC可能引起性能問題。 當然,還有很多東西要學習(關于使用Linux CLI和垃圾回收)。

了解Java的垃圾回收過程的目的不僅是免費(無聊)的對話入門者,其目的還在于學習如何針對特定環(huán)境有效地實現(xiàn)和維護具有最佳性能的正確GC。 知道垃圾回收會影響應用程序性能是基礎,并且有許多先進的技術可以增強GC性能并減少其對應用程序可靠性的影響。

GC性能問題

1.內(nèi)存泄漏–

通過了解堆結(jié)構(gòu)以及如何執(zhí)行垃圾回收,我們知道內(nèi)存使用率逐漸增加,直到發(fā)生垃圾回收事件并且使用率回落為止。 被引用對象的堆利用率通常保持穩(wěn)定,因此下降幅度應大致相同。

發(fā)生內(nèi)存泄漏時,每個GC事件都會清除一小部分堆對象(盡管沒有使用許多留在后面的對象),因此堆利用率將繼續(xù)增加,直到堆內(nèi)存已滿,并且將拋出OutOfMemoryError異常。 原因是GC僅將未引用的對象標記為刪除。 因此,即使不再使用引用的對象,也不會從堆中清除該對象。 有一些有用的編碼技巧可以防止這種情況,稍后我們將介紹。

2.連續(xù)的“停止世界”活動–

在某些情況下,垃圾回收可以稱為Stop the World事件,因為當垃圾回收發(fā)生時,JVM中的所有線程(因此,在其上運行的應用程序)都將停止以允許GC執(zhí)行。 在健康的應用程序中,GC執(zhí)行時間相對較短,并且不會對應用程序性能產(chǎn)生較大影響。

但是,在欠佳的情況下,“世界停止”事件可能會嚴重影響應用程序的性能和可靠性。 如果GC事件需要“停止世界”暫停并需要2秒鐘的時間執(zhí)行,則該應用程序的最終用戶將遇到2秒的延遲,因為運行該應用程序的線程被停止以允許GC。

當發(fā)生內(nèi)存泄漏時,連續(xù)的“停止世界”事件也是有問題的。 由于每次執(zhí)行GC都會清除較少的堆內(nèi)存空間,因此剩余內(nèi)存填滿的時間會更少。 當內(nèi)存已滿時,JVM會觸發(fā)另一個GC事件。 最終,JVM將運行重復的Stop the World事件,從而引起嚴重的性能問題。

3. CPU使用率–

而這全都取決于CPU使用率。 連續(xù)GC /“停止世界”事件的主要癥狀是CPU使用率激增。 GC是一項計算量很大的操作,因此可能會花費比CPU功率更多的份額。 對于運行并發(fā)線程的GC,CPU使用率可能更高。 為您的應用程序選擇合適的GC將對CPU使用率產(chǎn)生最大的影響,但是還有其他方法可以優(yōu)化以提高該領域的性能。

從圍繞垃圾收集的性能問題中我們可以了解到,盡管高級GC獲得了(并且它們已經(jīng)相當先進),但其致命弱點仍然保持不變。 冗余且不可預測的對象分配。 為了提高應用程序性能,僅選擇正確的GC是不夠的。 我們需要知道流程的工作方式,并且需要優(yōu)化代碼,以使我們的GC不會占用過多的資源或在應用程序中造成過多的暫停。

世代GC

在深入研究不同的Java GC及其對性能的影響之前,了解世代垃圾收集的基礎很重要。 世代GC的基本概念基于這樣的思想,即對堆中某個對象的引用存在的時間越長,將其標記為刪除的可能性就越小。 通過使用具有象征意義的“年齡”標記對象,可以將它們分隔到不同的存儲空間,以使GC進行標記的頻率降低。

將對象分配給堆時,會將其放置在所謂的Eden空間中。 那是對象開始的地方,在大多數(shù)情況下,它們是標記為刪除的地方。 在該階段幸存的對象“慶祝生日”,并復制到Survivor空間。 此過程如下所示:

伊甸園和幸存者空間組成了年輕一代。 這是大部分操作發(fā)生的地方。 當(如果)年輕一代中的某個對象達到一定年齡時,該對象將被提升到終身(也稱為舊)空間。 根據(jù)年齡劃分對象內(nèi)存的好處是GC可以在不同級別上運行。

次要GC是僅關注年輕一代的集合,實際上完全忽略了Tenured空間。 通常,年輕代中的大多數(shù)對象都標記為刪除,并且不需要主或完全GC(包括舊代)來釋放堆上的內(nèi)存。 當然,必要時會觸發(fā)“主要”或“完全” GC。

在此基礎上優(yōu)化GC操作的一個快速技巧是調(diào)整堆區(qū)域的大小,以最適合您的應用程序的需求。

收集器類型

有許多可用的GC可供選擇,盡管G1成為Java 9中的默認GC ,但它最初旨在替代低暫停的CMS收集器,因此使用吞吐量收集器運行的應用程序可能更適合保留其當前收集器。 對于Java垃圾收集器,了解操作上的差異以及性能影響方面的差異仍然很重要。

吞吐量收集器

更適合需要針對高吞吐量進行優(yōu)化的應用程序,并且可以交易更高的延遲來實現(xiàn)。

序列號–

串行收集器是最簡單的收集器,也是您最不可能使用的收集器,因為它主要用于單線程環(huán)境(例如32位或Windows)和小型堆。 該收集器可以垂直擴展JVM中的內(nèi)存使用量,但需要幾個主要/完全GC才能釋放未使用的堆資源。 這導致頻繁的Stop the World暫停,從而使它在所有意圖和目的上都失去了在面向用戶的環(huán)境中使用的資格。

平行 -

顧名思義,此GC使用并行運行的多個線程來掃描并壓縮堆。 盡管Parallel GC使用多個線程進行垃圾回收,但它仍在運行時暫停所有應用程序線程。 Parallel收集器最適合需要優(yōu)化以實現(xiàn)最佳吞吐量并可以忍受更高延遲的應用程序。

低暫停時間收集器

大多數(shù)面向用戶的應用程序需要低暫停GC,因此長時間或頻繁的暫停不會影響用戶體驗。 這些GC都是為了優(yōu)化響應能力(時間/事件)和強大的短期性能。

并發(fā)標記掃描(CMS)–

與并行收集器相似,并發(fā)標記掃描(CMS)收集器利用多個線程來標記和清除(刪除)未引用的對象。 但是,此GC僅在以下兩個特定實例中啟動“停止世界”事件:

(1)初始化根的初始標記時(舊代對象可以從線程入口點或靜態(tài)變量訪問)或main()方法的任何引用,以及更多

(2)當應用程序在算法同時運行時更改了堆的狀態(tài)時,迫使它返回并進行最后的修改以確保它標記了正確的對象

G1 –

垃圾第一收集器(通常稱為G1)利用多個后臺線程掃描通過堆將其劃分為多個區(qū)域。 它的工作方式是先掃描那些包含最多垃圾對象的區(qū)域,然后為其命名(垃圾優(yōu)先)。

這種策略減少了在后臺線程完成對未使用對象的掃描之前耗盡堆的機會,在這種情況下,收集器將不得不停止應用程序。 G1收集器的另一個優(yōu)點是它可以在移動過程中壓縮堆,這是CMS收集器僅在完全Stop the World收集期間執(zhí)行的操作。

改善GC性能

垃圾收集的頻率和持續(xù)時間直接影響應用程序的性能,這意味著可以通過減少這些指標來優(yōu)化GC流程。 有兩種主要方法可以做到這一點。 首先,通過調(diào)整年輕人和老年人的堆大小 ,其次,以減少對象分配和提升的速度

在調(diào)整堆大小方面,它并不像人們期望的那么簡單。 合理的結(jié)論是,增加堆大小將減少GC頻率,同時增加持續(xù)時間,而減少堆大小將減少GC持續(xù)時間,同時增加頻率。

不過,事實是,次要GC的持續(xù)時間不取決于堆的大小,而是取決于可以幸存的對象數(shù)量。 這意味著對于大多數(shù)創(chuàng)建壽命短的對象的應用程序,增加年輕代的大小實際上可以減少GC的持續(xù)時間和頻率。 但是,如果增加年輕代的大小會導致需要在幸存者空間中復制的對象顯著增加,則GC暫停將花費更長的時間,從而導致延遲增加。

編寫GC高效代碼的3個技巧

提示1:預測收集容量–

所有標準Java集合以及大多數(shù)自定義和擴展的實現(xiàn)(例如Trove和Google的Guava)都使用基礎數(shù)組(基于原始或?qū)ο蟮臄?shù)組)。 由于數(shù)組一旦分配就大小不變,因此在許多情況下向集合中添加項目可能會導致丟棄舊的基礎數(shù)組,而使用較大的新分配的數(shù)組。

即使未提供預期的集合大小,大多數(shù)集合的實現(xiàn)也會嘗試優(yōu)化此重新分配過程,并將其保持在攤銷后的最小值。 但是,通過在構(gòu)造時為集合提供預期的大小可以達到最佳效果。

提示2:直接處理流–

例如,在處理數(shù)據(jù)流(例如從文件讀取的數(shù)據(jù)或通過網(wǎng)絡下載的數(shù)據(jù))時,通常會看到以下內(nèi)容:

byte[] fileData = readFileToByteArray(new File("myfile.txt"));

然后可以將得到的字節(jié)數(shù)組解析為XML文檔,JSON對象或Protocol Buffer消息,以列舉一些常用的選項。

當處理大文件或大小無法預測的文件時,這顯然不是一個好主意,因為在JVM無法實際分配整個文件大小的緩沖區(qū)的情況下,這會使我們面臨OutOfMemoryErrors。

解決此問題的更好方法是使用適當?shù)腎nputStream(在這種情況下為FileInputStream)并將其直接輸入解析器,而無需先將整個內(nèi)容讀取到字節(jié)數(shù)組中。 所有主要的庫都公開API以直接解析流,例如:

FileInputStream fis = new FileInputStream(fileName); MyProtoBufMessage msg = MyProtoBufMessage.parseFrom(fis);

提示3:使用不可變對象–

不變性有很多優(yōu)點。 很少受到關注的一個問題是它對垃圾收集的影響。

不變對象是指其對象(在我們的情況下尤其是非原始字段)在構(gòu)造對象后便無法修改的對象。

不變性意味著不變?nèi)萜饕玫乃袑ο蠖际窃谌萜鳂?gòu)造完成之前創(chuàng)建的。 用GC的術語來說:容器至少與所保存的最小引用一樣年輕。 這意味著在對年輕一代執(zhí)行垃圾回收周期時,GC可以跳過位于老一代中的不可變對象,因為它可以確定它們不能引用正在收集的一代中的任何對象。

要掃描的對象越少,意味著要掃描的內(nèi)存頁面越少,而要掃描的內(nèi)存頁面就越少,意味著GC周期越短,這意味著GC暫停時間越短,總體吞吐量就越高。

有關更多技巧和詳細示例,請查看這篇文章,其中涵蓋了編寫更多內(nèi)存有效代碼的深入策略。

***非常感謝OverOps研發(fā)團隊的Amit Hurvitz對本文的熱情和見解!

翻譯自: https://www.javacodegeeks.com/2018/08/improve-application-performance-gc.html

system.gc 性能

總結(jié)

以上是生活随笔為你收集整理的system.gc 性能_使用这些先进的GC技术提高应用程序性能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人午夜免费视频 | 国产一级影院 | 快射视频在线观看 | 99精品久久久久久 | 韩日黄色 | 99成人 | xxxx.国产| 精品玖玖玖 | 亚洲第一av | 久久久精品国产 | 国产激情a | 亚洲呦呦 | 制服丝袜av电影 | 欧美精选一区 | 综合国产视频 | 国产精品欧美激情在线 | 精品国产亚洲AV | 中国肥胖女人真人毛片 | 欧美一区三区三区高中清蜜桃 | 欧美色xxx| 8090理论片午夜理伦片 | 欧美一级做a爰片免费视频 成人激情在线观看 | 玩弄丰满少妇xxxxx性多毛 | 鬼灭之刃柱训练篇在线观看 | 欧美大片黄色 | 最新中文字幕久久 | 久久调教视频 | 玩弄人妻少妇500系列视频 | 欧美精品激情 | 热热色av| 久久国语| 日本福利视频导航 | 午夜精品久久久久久久蜜桃 | 人妻一区二区三区视频 | 天天干天天弄 | 在线永久看片免费的视频 | 一区一区三区产品乱码 | 中文字幕无线码 | 日本天堂免费a | 一级免费黄色大片 | 国产在线日韩 | 九色网址 | 伊人网亚洲 | 91国内揄拍国内精品对白 | 亚洲自啪| ,一级淫片a看免费 | 成人网视频 | 日韩精品免费在线观看 | 四虎影院在线视频 | 日韩一卡二卡三卡 | 91丨porny丨在线 | 色综合天天综合综合国产 | 日本伦理一区二区 | 成人免费午夜视频 | 西西4444www大胆无视频 | 荒野求生21天去码版网站 | 中文字幕日韩亚洲 | 欧美高清hd18日本 | 成人免费毛片足控 | 亚洲国产一区二区a毛片 | 成年人视频免费在线观看 | 亚洲 欧美 日韩 在线 | 丰满少妇被猛烈进入 | 亚洲国产tv | 日韩精品免费播放 | 日干夜操 | 国产精品久久久久影院 | 国产精品久久久久久久久久久久 | 男女羞羞的视频 | 91免费网站入口 | 亚洲一区中文字幕在线 | 国产成人福利 | 久久精品操| 狼人精品一区二区三区在线 | 精品国产欧美日韩 | 国产精品视频全国免费观看 | 午夜精品在线视频 | 九月丁香婷婷 | 国产码视频 | 国产精品视频一区二区三区, | 天海翼一区 | 亚洲黄色小视频 | 一级美女黄色片 | 在线视频三区 | 国产7777777| 国内精久久久久久久久久人 | 免费一级特黄3大片视频 | 一区视频网站 | 成人18视频 | 国内精品久久久久久久久 | 国产亲伦免费视频播放 | 午夜av在线免费观看 | 电影一区二区三区 | 18欧美性xxxx极品hd | 日韩高清不卡 | 国产高清视频免费 | 91免费精品 | 麻豆传媒视频入口 | 国产精品第6页 |