成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于Java垃圾回收被誤解的7件事

開發 后端
當 我還是小孩的時候,父母常說如果你不好好學習,就只能去掃大街了。但他們不知道的是,清理垃圾實際上是很棒的一件事。可能這也是即使在Java的世界中, 同樣有很多開發者對GC算法產生誤解的原因——包括它們怎樣工作、GC是如何影響程序運行和你能對它做些什么。因此我們找到了Java性能調優專家Haim Yadid,并把名為Java performance tuning guide的文章發表在Takipi的博客上。

對Java垃圾回收最大的誤解是什么?它實際又是什么樣的呢?

當 我還是小孩的時候,父母常說如果你不好好學習,就只能去掃大街了。但他們不知道的是,清理垃圾實際上是很棒的一件事。可能這也是即使在Java的世界中, 同樣有很多開發者對GC算法產生誤解的原因——包括它們怎樣工作、GC是如何影響程序運行和你能對它做些什么。因此我們找到了Java性能調優專家Haim Yadid,并把名為Java performance tuning guide的文章發表在Takipi的博客上。

關于Java垃圾回收被誤解的7件事

帶著對性能調優指南濃厚的興趣,我們決定在這篇后續的博文中收集一些關于垃圾回收的流行觀點,并且指出為什么它們完全是錯誤的。

來看看前7名:

1. 只有一個垃圾回收器

不,并且4也是錯誤的答案。HotSpot JVM一共有4個垃圾回收器:Serial, Parallel / Throughput. CMS, and the new kid on the block G1。別急,另外還有一些非標準的垃圾回收器和更大膽的實現,比如Shenandoah或 者其他JVM使用的回收器(C4——Azul開發的無停頓回收器)。HotSpot默認使用Parallel / Throughput回收器,但它常常不是你運行程序的最佳選擇。比如CMS和G1會使GC停頓(GC pause)發生的頻率降低,但是對于每次停頓所花費的時間,很可能比Parallel回收器更長。另一方面來說,在使用相同大小堆內存的情況 下,Parallel回收器能帶來更高的吞吐量。

結論:根據你的需求(可接受的GC停頓頻率和持續時間)選擇合適的垃圾回收器。

2. 并行(Parallel) = 并發(Concurrent)

一個GC周期(Garbage Collection cycle)可以以STW(Stop-The-World)的形式出現,這會發生一次GC停頓,也可以并發地執行從而無需暫停應用程序。更進一步來 講,GC算法本身可以是串行的(單線程),也可以是并行的(多線程)。因此當我們提到并發的GC時,并不代表它是并行完成的,相反當提到串行GC時,也并 不意味著就一定會出現GC停頓。在GC的世界中,并發和并行是兩個完全不同的概念。并發針對的是GC周期,而并行針對GC算法自身。

結論:垃圾回收的過程實際上有兩步,啟動GC周期和GC自身運行,這是不同的兩件事。

3. G1能解決所有問題

經過一系列修正和改 進,Java 7中引入了G1回收器,它是JVM垃圾回收器中最新的組件。G1最大的優勢就是解決了CMS中常見的內存碎片問題:GC周期會從老年代(Old Generation)中釋放內存塊,結果內存變得像瑞士奶酪那樣千瘡百孔,直到JVM對其無從下手了,才不得不停下來處理這些碎片。但是故事沒這么簡 單,某些情況下其他回收器可能比G1有更好的表現,這完全取決于你的需求。

結論:沒有一個奇跡般的回收器能解決所有GC問題,你應該通過具體實驗來選擇合適的回收器。

4. 平均事務時間是最需要被關注的指標

如 果你僅僅監控服務器的平均事務時間,那么很可能錯過一些異常值。這些異常的情況可能對用戶來說是毀滅性的,而人們沒有意識到它的重要性。比如一個事務在正 常情況下耗時100ms,但受到GC停頓的影響,花了1分鐘才完成。除了用戶沒人會注意到這個問題,因為你只觀察了平均事務時間。試想有1%或者更多的用 戶經歷了這個場景,如果只關注平均值,它就太容易被忽略了。想了解更多和延遲相關的問題和怎樣正確處理,可以在這里閱讀Gil Tene的博客。

結論:留心那些異常值,你可以知道系統最后那1%的狀況。(可不是這個1%

5. 降低新對象的分配率可以改善GC的運行狀況

我們可以 粗略地把系統中的對象分為三種:長命(long-lived)對象,對它們我們一般做不了什么;中等壽命(mid-lived)對象,最大的問題可能出現 在這;短命(short-lived)對象,它們的釋放和回收通常都很快,在下個GC周期來臨時就會消失。專注于中等壽命對象的分配率可以帶來有益的結 果,這對短命和長命的對象卻不是那么有效。另外,控制中等壽命對象往往是一項困難的工作。

結論:給服務器帶來壓力的并不單純是對象的分配率,在運行過程中這些對象的種類才是一切麻煩的根源。

6. 調優可以解決所有事

如果你的程序需要保存大量被頻繁修改的狀態,對JVM堆內存進行調優就無法帶來很好的收益。較長的GC停頓是不可避免的。一個解決辦 法是對架構進行改善,保證一個對響應時間有決定性影響或者造成瓶頸的過程中,不包含大量狀態。大量狀態和響應能力是難以良好共存的,因此將它們分開處理才 是上上之選。

結論:不是所有的問題都可以通過調整JVM參數解決,有時你只需要回顧自己的繪圖板。(譯注:重新審視程序的設計)

7. GC日志會導致巨大的系統開銷

簡單來說,這是錯的,尤 其在默認的日志配置下。日志數據是極為有價值的,Java 7中還引入了鉤子來控制它們的大小,保證硬盤空間不被用盡。如果不收集GC日志,那么你會失去這幾乎是唯一的,知曉JVM垃圾回收器在生產環境中工作狀態 的方法。一般可接受的GC開銷以5%作為上限,如果你能知道系統為GC停頓付出的代價,也能對最小化這個代價采取行動,這種程度的開銷是不值一提的。

結論:在能力范圍內,盡可能多地獲取系統在生產環境中的運行數據,你會發現那是一個全新的世界。

總結

希望上面的結論能幫助你們更好地把握Java垃圾回收器的工作。在你們的程序中出現過類似問題嗎?你們周圍還有沒有其他對GC常見的誤解?請在下面的評論區留言。

責任編輯:王雪燕 來源: 博客園
相關推薦

2021-04-15 08:04:27

容器DevOps程序

2015-03-11 11:23:38

MySQLPHP開發

2012-01-09 09:45:14

PhoneGapPPT

2020-05-08 15:30:42

PostgreSQL數據庫數據

2021-03-15 10:43:36

人工智能AI深度學習

2020-05-27 10:46:49

Kubernetes容器云計算

2022-06-08 09:57:50

物聯網市場物聯網采用物聯網

2018-08-23 08:21:54

TensorFlow機器學習人工智能

2021-08-03 10:40:47

混合云云計算應用程序

2024-01-09 14:57:22

2019-04-16 12:53:57

2014-11-14 17:39:23

云計算

2015-08-14 14:46:47

軟件開發

2015-08-14 16:39:59

軟件開發老板

2009-06-25 17:48:24

Java垃圾回收

2011-04-02 13:11:35

JARJava

2023-10-17 12:51:00

邊緣計算云計算

2018-08-01 17:39:17

LoRaWANNB-IoTIoT

2021-05-19 18:23:40

物聯網IOT物聯網技術

2023-10-16 13:36:00

邊緣計算數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲福利在线观看 | 国产区在线观看 | 国产成人免费视频网站高清观看视频 | 国产精品a久久久久 | 久久精品网 | 日日夜夜天天 | 国产91久久久久蜜臀青青天草二 | 国产成人99久久亚洲综合精品 | 九九亚洲 | 免费在线一区二区三区 | 三级av免费| 欧美一级大片 | 久久在线精品 | 久久这里只有精品首页 | 日本在线视频一区二区 | 免费观看日韩av | 精品一二区 | 黄色大片在线播放 | 91久久久久久 | 91精品国产乱码久久久久久 | 中文字幕亚洲一区 | 国产福利视频 | 成年人黄色一级毛片 | 亚洲影音先锋 | 日本中文字幕一区 | 免费在线观看一级毛片 | 国产在线视频99 | 一区二区三区四区在线免费观看 | 欧美一二三 | 久久久精 | 北条麻妃国产九九九精品小说 | 亚洲欧洲日韩 | 91在线精品视频 | 免费国产视频在线观看 | 久久久久网站 | 久久男人 | 91久久精品国产 | 成人在线网 | 欧美午夜精品 | 美美女高清毛片视频免费观看 | 一区二区免费看 |