• Java---jvm GC


    jvm

    dcy 2019-12-08


    • jvm
      • 虚拟栈区
      • 方法区
      • 本地方法区
      • 程序计数区

    • GC
      • 年轻代(young) 年老代(Tenured) 永久代(Perm)
      • 算法:引用计数法 可达性分析算法(A被B引用,但是没有对象引用B,则认为A,B为垃圾对象)
      • 清理算法: 标记-整理(Mark-Compact)(年老代)
        标记清理的垃圾对象,统一清除。第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。(碎片清理)
        复制(Copying)此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。
        (年轻代)

    st=>start: web请求
    op=>operation: 请求线程池中,看是否有空闲的线程
    op1=>operation: 创建新的线程
    op2=>operation: 等待
    op3=>operation: 请求超时
    op4=>operation: jvm为新线程创建Java栈。P寄存器,(清闲线程)PC寄存器指向第一行可执行代码。
    op5=>operation: 清闲线程
    op6=>operation: 执行到main一个方法的时候
    op7=>operation: 调用jvm本地方法区的方法(本地方法栈为虚拟机使用的Native方法服务)
    op8=>operation: 加载类。(加载类对象,初始化静态属性)
    op9=>operation: 在方法区查询
    op10=>operation: 方法区存在。
    op11=>operation: 方法区中加载类的方法。
    op13=>operation: 栈添加栈栈帧,存储存储局部变量表、操作栈、方法返回值等
    op14=>operation: 执行方法,栈的变量赋值
    op15=>operation: 执行完毕。
    op16=>operation: 线程返回线程池,由线程池进行重新设置
    
    cond=>condition: 有清闲的线程
    cond1=>condition: 线程池没有达到最大数目
    cond2=>condition: 等待是否超时
    cond3=>condition: 不是本地方法
    cond4=>condition: 方法所在的类是否第一次加载
    cond5=>condition: 不是静态类(单例模式)
    cond6=>condition: 方法区不存在
    
    e=>end: 结束
    
    st->op->cond
    
    cond(false)->cond1
    cond(true)->op5->op4
    
    cond1(false)->op2->cond2
    cond2(false)->op
    cond2(true)->op3
    cond1(true)->op1->op4
    
    op4->op6->cond3
    
    cond3(false)->op7
    cond3(true)->op8->cond5
    cond5(false)->op9->cond6
    cond6(false)->op10->op13
    cond5(true)->cond4
    
    cond4(false)->op9
    cond4(true)->op11->op13
    
    op13->op14->op15->op16->e
    
    
    
    

  • 相关阅读:
    HDU 4268 multiset
    ACM-线段树
    HDU 5014 异或之和
    HDU 5012 骰子旋转(DFS)
    HDU 5011 NIM博弈
    HDU 5007 字符串匹配
    Android-Context
    Android-视图绘制
    Android-LayoutInflater
    oracle--分页过程demo1
  • 原文地址:https://www.cnblogs.com/duchyaiai/p/12005466.html
Copyright © 2020-2023  润新知