zoukankan      html  css  js  c++  java
  • GC

    JVM底层架构

    1. 类装载子系统
    2. 运行时数据区
    3. 执行引擎

    JVM内存模型

    1. 栈(jvm栈)
      方法 临时变量

    2. 对象
    3. 本地方法栈
      c++ native方法
    4. 程序计数器
      程序当前运行的位置
    5. 方法区(元空间)
      static变量方法 classloader 全局变量信息
    • 栈 本地方法栈 程序计数器线程私有 有多少线程就有多少栈区
    • 堆 方法区是全局共享
    • 理解程序在内存中的调用过程

    GC机制

    1. GCRoot标准
      被栈 本地方法栈 方法区直接引用或间接引用的对象不能被删除
    2. 标记清理算法
      缺点:会产生内存碎片
    3. 标记整理算法
      解决内存碎片问题
      缺点:所有对象前移造成的代价太大
    4. 复制算法
      内存一分为二 在一区上标记对象是否被删除 将没有标记的复制到二区
      缺点:需要两倍内存
    5. GC在堆中的划分
      年轻代Young区
      老年代Old区
    • YoungGC 复制算法 8:1:1
      Eden 伊甸园
      Survive0
      Survive1
      当E区快满时,打标记,把没有打标记的复制到S0区,然后将E区和S0区全部删除,等下一次E区快满时,将S0区和E区所有对象打标,将没有打标的复制到S1,E+S1 复制到 S0,E+S0 复制到 S1,如此,往复
      垃圾收集器ParNew

    • Old区 age >= 6 大对象(占内存很大)
      又叫FullGC,快满时FullGC会引起java程序全部的暂停,全力进行垃圾回收,采用标记清理或标记整理算法
      垃圾收集器CMS

    • 垃圾收集器 分Young Old
      CMS 1. 初次标记 GCRoot对象 STW 2. 并发标记 所有的Old对象 3. 重新标记 修正2 STW 4. 并发清理 标记清理
      D1

    • G1
      Region区域大小在1M~32M 2000个左右
      0.5 <= 所占内存 <1 存储到Old区并标记为H超大对象
      所占内存 > 1 多个连续的H区存储 H区是O区的一种
      Rset Region中有个地方存储Rset 记录其它Region引用当前Region对象
      Cset 本次GC需清理的Region集合
      Young Old区都采用G1
      Young区 E区和Sfrom区Sto区 在一次GC的过程中利用复制算法,将E区和Sfrom区拷贝到Sto区
      Old区 也叫MixGC 1. 初次标记GCRoot对象和所在Region STW 2. RootRegion去扫描Old去的所有Region,看这些Region区中的是否有Rset,直接进行引用 3. 并发标记 同CMS作用相同,不过遍历范围只是被标记的 4. 重新标记 同CMS 采用新的算法 SATB 速度更快 STW 5. 复制清理 只选择了垃圾较多的Region进行清理,虽然清理不干净,但效率高 STW

    minor gc full gc

  • 相关阅读:
    [leetcode-79-Word Search]
    [leetcode-563-Binary Tree Tilt]
    [leetcode-561-Array Partition I]
    [leetcode-556-Next Greater Element III]
    [leetcode-554-Brick Wall]
    [leetcode-557-Reverse Words in a String III]
    [leetcode-532-K-diff Pairs in an Array]
    dev 官网
    DataTable 设置primarykey 后进行 Merge操作
    对称矩阵 一个简单的小把戏
  • 原文地址:https://www.cnblogs.com/nightrainlemon/p/11585855.html
Copyright © 2011-2022 走看看