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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

马士兵JVM课程笔记

發(fā)布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 马士兵JVM课程笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

馬士兵JVM課程筆記

GC和GC Tuning

GC的基礎(chǔ)知識

1.什么是垃圾

C語言申請內(nèi)存:malloc free

C++: new delete

c/C++ 手動回收內(nèi)存

Java: new ?

自動內(nèi)存回收,編程上簡單,系統(tǒng)不容易出錯,手動釋放內(nèi)存,容易出兩種類型的問題:

  • 忘記回收
  • 多次回收
  • 沒有任何引用指向的一個對象或者多個對象(循環(huán)引用)

    2.如何定位垃圾

  • 引用計數(shù)(ReferenceCount)
  • 根可達算法(RootSearching)
  • 3.常見的垃圾回收算法

  • 標記清除(mark sweep) - 位置不連續(xù) 產(chǎn)生碎片 效率偏低(兩遍掃描)

    1.標記清除(Mark-Sweep)

    老年代一般是由標記清除或者是標記清除與標記整理的混合實現(xiàn)

    • 原理

    當堆中的有效內(nèi)存空間(available memory)被耗盡的時候,就會停止整個程序(也被稱為stop the world),然后進行兩項工作,第一項則是標記,第二項則是清除。

    標記:從引用根節(jié)點開始標記所有被引用的對象。標記的過程其實就是遍歷所有的GC Roots,然后將所有GC Roots可達的對象 標記為存活的對象。

    清除:遍歷整個堆,把未標記的對象清除。

    缺點:此算法需要暫停整個應(yīng)用,會產(chǎn)生內(nèi)存碎片

    用通俗的話解釋一下標記/清除算法,就是當程序運行期間,若可以使用的內(nèi)存被耗盡的時候,GC線程就會被觸發(fā)并將程序暫停,隨后將依舊存活的對象標記一遍,最終再將堆中所有沒被標記的對象全部清除掉,接下來便讓程序恢復運行。

    • 劣勢

    1、首先,它的缺點就是效率比較低(遞歸與全堆對象遍歷),而且在進行GC的時候,需要停止應(yīng)用程序,這會導致用戶體驗非常差勁

    2、其次,主要的缺點則是這種方式清理出來的空閑內(nèi)存是不連續(xù)的,這點不難理解,我們的死亡對象都是隨即的出現(xiàn)在內(nèi)存的各個角落的,現(xiàn)在把它們清除之后,內(nèi)存的布局自然會亂七八糟。而為了應(yīng)付這一點,JVM就不得不維持一個內(nèi)存的空閑列表,這又是一種開銷。而且在分配數(shù)組對象的時候,尋找連續(xù)的內(nèi)存空間會不太好找。

  • 拷貝算法 (copying) - 沒有碎片,浪費空間
  • 標記壓縮(mark compact) - 沒有碎片,效率偏低(兩遍掃描,指針需要調(diào)整)
  • 總結(jié)

    以上是生活随笔為你收集整理的马士兵JVM课程笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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