jvm诸葛老师笔记整理

jvm简单介绍

在这里插入图片描述

 从这张图我们可以清楚的看出来 我们写好的java代码是先经过编译生成class文件
然后才是我们jvm 要做的部分 意思就是java是面向编译之后的class文件产生的 用来屏蔽不同的操作系统在底层和硬件指令上的区别 把class文件翻译成为无论是什么机器都可以 "看懂"的机器码

 栈

  栈也叫虚拟机栈,每开辟一个线程就会有一个栈空间被开辟出来

栈的组成

           栈实际上就是栈帧组成的, 而每一个栈帧又存储着与之对应的方法的局部变量表,操作数栈,动态链接,方法出口
也就是一个方法对应一个栈帧 栈帧就是java中每个方法的存放空间
局部变量表 : 存放着方法中的局部变量
操作数栈: 用来操作方法中的数的一个临时栈
动态链接:把符号引用存在直接应用存在内存空间中
方法出口: 记录该方法调用完毕应该回到的地方 (放到我们这个例子中就是回到Main函数的下一行)

程序计数器

属于线程私有 用来存放线程执行代码的位置(就是.class文件中的行号) 由字节码执行引擎来操作

方法区

常量 (静态常量)

静态变量(指向堆空间)

方法信息

存放各种new出来的对象
局部变量表会指向
方法区 中的静态变量也会指向

堆结构和垃圾搜集过程

//垃圾搜集都是字节码执行器在做

1、new 出来的对象都会往 Eden(伊甸)区放 然后满了 会进行minor gc
2、存活的放到s0中
3、再次满了 再次搜集s0和Eden存活对象 放到s1中
4、…s1,eden–>s0 不断调换
5、年龄到达15的 进入老年区
6、老年区满了 会启动full gc 启动full gc时候必须暂停所有执行的代码也就是STW(stop the world) 因为我们的对象必须要有一个确定的状态 不暂停的话就无法确定

一个jvm调优案例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值