JVM基础思维导图(持续更新中)

JVM

JVM内部构造

字节码执行引擎

  • 任务就是将字节码指令编译为对应平台上的本地机器指令执行

JVM内存模型

内部关系

  • 程序计数器

    • 存在位置:每个线程都占有的独立的内存区域中,都有一部分区域用来放该线程的程序计数器

      • .class文件 (java -c 得到)

字节码文件中,每个方法对应的解析后内容

Code: 0 - n 就是我们想要的那个执行位置
(行数)

- 用处:用于记录当前线程正在执行的代码的位置(行号)
- 存在原因:假如CPU执行该线程到一半去干别的活,当前线程被挂起,那么就需要知道被插队前执行到哪了,以方便CPU回来干活后能从上一个记录点继续
- 数值变化:每运行完一行,程序计数器存放的值会被字节码执行引擎修改
  • 方法区(元空间,永久代)

    • 存放内容:
      常量,静态变量,类信息
  • 本地方法栈

    • 本地(native)方法专用的内存空间:

当调用native修饰的方法,即使用C语言编写的底层方法时,JVM会在该线程的内存空间内划出一块区域给它

  • 线程栈

    • 每条线程在开始运行前,JVM都会为该线程分配独立的栈内存空间存放局部变量

      • 栈帧内存:
        在一条线程内,当要执行某个方法时,JVM会在其所拥有的栈内存空间内,为这个方法分配其独立的内存空间存放局部变量(套娃)。

当该方法调用完成后,方法所占的栈帧内存被释放。

栈内存顺序(FILO):程序方法嵌套调用与栈的结构相同

     - 栈帧内存内部:
  1. 局部变量表

  2. 操作数栈

  3. 动态链接

  4. 方法出口

             - 局部变量表:
    

是变量值的存储空间,由方法参数和方法内部定义的局部变量组成,其容量用Slot1作为最小单位
- 操作数栈:

LIFO栈,由字节码指令往栈中存数据和取数据
- 动态链接:

每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有该引用是为了支持方法调用过程中的动态连接。
- 方法出口:

存放调用调用该方法的pc计数器的值。当一个方法开始之后,只有两种方式可以退出这个方法:
1、执行引擎遇到任意一个方法返回的字节码指令,也就是所谓的正常完成出口。2、在方法执行的过程中遇到了异常,并且这个异常没有在方法内进行处理,也就是只要在本方法的异常表中没有搜索到匹配的异常处理器,就会导致方法退出,这种方式成为异常完成出口。

正常完成出口和异常完成出口的区别在于:通过异常完成出口退出的不会给他的上层调用者产生任何的返回值。

无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置,方法正常退出时,调用者的pc计数器的值作为返回地址,而通过异常退出的,返回地址是要通过异常处理器表来确定,栈帧中一般不会保存这部分信息。

- 存放堆中对象的内存地址
    • 存储:
      new的对象

    • 堆的内部结构

      • 年轻代

        • Eden区

          • 当Eden区满了以后, Minor GC前来收垃圾

            • 收垃圾原理
        • Survivor区

          • From区
          • To区
      • 老年代

        • 老年代满了以后,Full GC前来收垃圾

          • Full GC结束工作后还是没位置,发生OOM
  • Tips:

    • 堆和方法区是被线程共享的区域

    • 堆内存大小分配:
      年轻代:
      Eden : From: To = 8 : 1 : 1

    • 从Survivor区进入老年代区:

  1. 长期存活:分代年龄达到15
  2. 对象动态年龄判断:非垃圾对象大小大于即将进入的Survivor区的1/2
  3. 大对象:(字符串,数组等)JVM参数可以设置大对象大小,超过该阀值则直接进入老年代

JVM调优

JVM调优目的

  • 减少用户的停顿时间

    • 减少STW时间

      • 减少Full GC次数

References:

  1. 2020年最新Java虚拟机JVM底层原理分析视频教程全集 — 程序员诸葛
    Retrieved from: https://www.bilibili.com/video/BV1dJ411G7YJ?p=7
  2. Java JVM 中 堆,栈,方法区 详解 — 张启露
    Retrieved from: https://blog.csdn.net/zhangqiluGrubby/article/details/59110906

JVM基础思维导图(持续更新中)相关推荐

  1. 网络空间安全导论|基本思维导图持续更新中~

    文章目录 五大服务八大机制 网络的安全问题 网络的安全威胁 数字证书 用户鉴别 防火墙 访问控制   最近期末周了,一边复习一边做了点简单的导图帮助理解,也分享出来帮助大家更好地理清他们的关系 PS: ...

  2. 机器学习思维导图(更新中)

    机器学习思维导图 此思维导图可以作为机器学习的参考,让学习者可以有一个整体的观念 #mermaid-svg-vLrM5cuai4INm1Sm .label{font-family:'trebuchet ...

  3. HCIE之路-13 华为MPLS基础思维导图(不定期更新,纯个人理解,欢迎批评指正!!!)

    如果有问题,或者需要原件xmind导图,请留言!

  4. HCIE之路-12 华为BGP基础思维导图(不定期更新,纯个人理解,欢迎批评指正!!!)

    如果有问题,或者需要原件xmind导图,请留言!

  5. HCIE之路-11 华为路由引入,路由控制基础思维导图(不定期更新,纯个人理解,欢迎批评指正!!!)

    如果有问题,或者需要原件xmind导图,请留言!

  6. HCIE之路-14 华为组播基础思维导图(不定期更新,纯个人理解,欢迎批评指正!!!)

    如果有问题,或者需要原件xmind导图,请留言!

  7. 计算机及网络应用基础思维导图_思维导图在生物教学中的应用

    思维导图又叫心智图,是由一个中心向周围有层次的发散的图形,由词汇.图形.线条.编号等构成,应用不同颜色的笔画出各级分支,既是一种思维工具又是一种学习方法.生物学科中含有大量的概念.生物分类.生物特征等 ...

  8. 关于主机的思维导图_计算机网络思维导图(零基础--思维导图详细版本及知识点)...

    计算机网络思维导图(零基础--思维导图详细版本及知识点)_gl620321的博客-CSDN博客​blog.csdn.net第一章 计算机网络概述 1.计算机网络向用户提供的最重要的功能分别是(连通性) ...

  9. 计算机操作系统思维导图_计算机网络思维导图(零基础--思维导图详细版本及知识点)...

    计算机网络思维导图(零基础--思维导图详细版本及知识点)_gl620321的博客-CSDN博客​blog.csdn.net 第一章 计算机网络概述 1.计算机网络向用户提供的最重要的功能分别是(连通性 ...

  10. Linux入门基础思维导图

    Linux入门基础思维导图 01 发行版本 02 系统目录 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 03 环境安装 04 SSH服务 05 启动模式策略 / ...

最新文章

  1. Computing--图灵机
  2. php mysql随机记录,php – 从MySQL中选择可变数量的随机记录
  3. oracle存储日志
  4. windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡
  5. 深入理解Java中的逃逸分析
  6. iphone主屏幕动态壁纸_iPhone8怎么设置动态壁纸?iPhone8动态壁纸设置教程
  7. App-V轻量级应用程序虚拟化之三客户端测试
  8. 关于Golang的4个小秘密
  9. javascript document cookie
  10. 箱包品牌Rimowa成为Vidy广告商,在Vogue新加坡使用VidyCoin购买广告业务
  11. day22:更换yum源及源码包安装
  12. 雷军:避开阿里、绕过腾讯,只为开辟小米新战场!
  13. 本特利探头330104-00-02-10-02-00
  14. autojs写的全网视频解析app,带解析接口。
  15. 74ls20设计半加器_组合逻辑电路(半加器全加器及逻辑运算)实验报告
  16. 3、圆周运动与椭圆运动
  17. 2015年电商行业十大发展趋势分析预测
  18. APM_Rover运行纲领分析,以pixhawk-fmuv2为硬件平台,ChibiOS为底层操作系统:
  19. 通过网页免费下载音乐(F12)
  20. CYQ.Data、ASP.NET Aries 百家企业使用名单

热门文章

  1. 2500个常用中文字符 + 130常用中英文字符
  2. 无人便利店代理前景分析
  3. 软件程序设计中的N-S图、PAD图、程序流程图、E-R图
  4. ARP病毒攻击技术分析与防御
  5. 阿里云CentOS7服务器搭建邮件服务器,端口:465
  6. 5位数的数字黑洞是多少_奇妙的数字黑洞——6174
  7. python爬取豆瓣电影名称与评分进行分析
  8. Java网络编程(9)NIO - 群聊系统
  9. Hybrid App的架构
  10. IT人员应该掌握的30种技能