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




 posted on 2019-12-08 13:17  一朵茉莉花  阅读(139)  评论(0编辑  收藏  举报