<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java內(nèi)存回收和常用算法

          共 1812字,需瀏覽 4分鐘

           ·

          2021-05-14 20:17

          1.什么是垃圾?(Java中)

          (1)一個(gè)對(duì)象沒有任何引用指向這個(gè)對(duì)象

          (2)幾個(gè)對(duì)象之間互相循環(huán)引用,但是沒有引用指向這個(gè)循環(huán),那這個(gè)幾個(gè)對(duì)象屬于一堆垃圾

          總結(jié)一句話:沒有任何引用指向的一個(gè)對(duì)象或者多個(gè)對(duì)象


          2.如何定位垃圾?

          (1)reference count(引用計(jì)數(shù)):

          對(duì)于對(duì)象進(jìn)行一個(gè)引用的標(biāo)記,有兩個(gè)引用它的就標(biāo)記為2,沒有引用它的就標(biāo)記為0,但是這種對(duì)于循環(huán)的引用的垃圾是無法回收的,這樣就會(huì)發(fā)生內(nèi)存泄漏

          (2)Root Searching(根可達(dá)算法):

          根據(jù)根對(duì)象一步一步去找引用的對(duì)象,最終沒有找到的都被認(rèn)為是垃圾


          根對(duì)象包括:線程棧變量,靜態(tài)變量,常量池,JNI指針

          以下是java中的原話:



          3.常見的垃圾回收算法

          Mark-Sweep(標(biāo)記清除)

          Coping(拷貝)

          Mark-Compact(標(biāo)記壓縮)


          (1)Mark-Sweep——缺點(diǎn):位置不連續(xù),產(chǎn)生碎片


          (2)Coping——缺點(diǎn):沒有碎片,但是浪費(fèi)空間


          (3)Mark-Compact——沒有碎片,也不浪費(fèi)空間,但是效率較低,比copy略低

          有用的部分都?jí)嚎s到最前面,空著的部分放在最后面,不碎片化,也不浪費(fèi)空間



          4.JVM內(nèi)存分代模型(用于分代垃圾回收算法)

          1.部分垃圾回收器使用的模型

          2.新生代+老年代+永久代(1.7)/元數(shù)據(jù)區(qū)(1.8)Metaspace

          (1)永久代和元數(shù)據(jù)區(qū)都是用來裝class對(duì)象的

          (2)永久代必須指定大小限制,元數(shù)據(jù)是可以設(shè)置,也可以不設(shè)置,無上限(受限于物理內(nèi)存)

          (3)jdk1.7版本的字符串常量是存在永久代的,1.8版本的時(shí)候是存在堆里

          (4)MethodArea(方法區(qū))是一種邏輯概念,在jdk1.7版本上對(duì)應(yīng)的是永久代,在jdk1.8上對(duì)應(yīng)的是元數(shù)據(jù)區(qū)

          new-young:存活對(duì)象少,使用copy算法,效率高

          old:垃圾少,一般使用mark-compact,g1使用copy

          在java1.7中還有permanent算法

          3.堆內(nèi)存邏輯分區(qū)


          new一個(gè)對(duì)象,直接去找伊甸區(qū),如果new的對(duì)象太大,伊甸區(qū)裝不下,直接進(jìn)入老年代

          YGC使用拷貝算法,FGC使用標(biāo)記壓縮算法,YGC雖然無法避免但是效率較高,FGC效率較低

          (1)新生代=Eden + 2個(gè)suvivor區(qū)

          1. YGC回收之后,大多數(shù)的對(duì)象(90%)會(huì)被回收,活著的進(jìn)入s0再次YGC,活著的對(duì)象eden + s0 -> s1再次YGC,eden + s1 -> s0年齡足夠 -> 老年代 (老版的垃圾回收器:15歲,15歲即回收15次,為什么是15次呢,因?yàn)樵谝粋€(gè)對(duì)象的頭部有4位來代表它的年齡,這個(gè)4位代表的最大數(shù)就是15, CMS垃圾回收器:6歲)s區(qū)裝不下 -> 老年代

          (2)老年代

          1. 頑固分子老年代滿了FGC Full GC

          (3)GC Tuning (GC調(diào)優(yōu),假設(shè)使用的是Generation算法)

          1. 盡量減少FGCMinorGC = YGCMajorGC = FGC


          5.Java到目前為止產(chǎn)生的10種垃圾回收器


          垃圾回收器組合:

          最早的jdk垃圾回收器的組合: Serial + Serial Old

          常見的垃圾回收器組合Parallel Scavenge + Parallel Old


          (1)Serial垃圾回收器


          (2)Parallel Scavenge 年輕代 并行回收


          (3)ParNew 年輕代 配合CMS的并行回收


          (4)SerialOld


          (5)ParallelOld


          (6)Concurrent Mark Sweep(CMS) 老年代,并發(fā)的, 垃圾回收和應(yīng)用程序同時(shí)運(yùn)行,降低STW的時(shí)間(200ms)


          (7)G1(10ms)



          (8)ZGC (1ms) PK C++

          (9)Shenandoah

          (10)Eplison

          這是一個(gè)空的GC,本身并沒有做任何事情,只是用來調(diào)試jdk的,jdk11才有

          jdk1.8 默認(rèn)的垃圾回收:Parallel Scavenge + Parallel Old


          6.GC概念




          7.總結(jié),內(nèi)存分配流程圖




          8.JVM調(diào)優(yōu)工具

          arthas

          Java VisualVM

          jmap命令



          9.GC調(diào)優(yōu)日志詳解

          ?

          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级片A片| 天天想夜夜操 | 国产精品美女操逼 | 91精品国产综合久久久蜜臀酒店 | 九哥操逼逼视频一区二区 |