• JVM理解(二)


    上一节了解完类加载机制后,继续学习JVM

    HotSpot虚拟机是Sun/OracleJDK和OpenJDK中默认的Java虚拟机,也是目前使用范围最广的Java虚拟机。

     一起学习一下Runtime Data Area吧~


    Runtime Data Area(运行时数据区)

    进程生命周期

    以下这些区域存储的数据是被当前进程中所有线程所共享的,所以这些数据是非安全性的

    • MethodArea(方法区)
      • 又称Class Template类模板,存放类对象,常量,静态变量
    • Heap(堆)
      • 存放的是class对象(new ThreadDemo())对象实例

    线程生命周期

    存活时间是和线程绑定一期的,每个线程都有以下三个区域,这些区域数据是私有的线程安全的

    • Java虚拟机栈
      • ​​​​​​​一个方法被执行,一个栈桢就会被创建
      • 由于栈是先进后出,所以限制性的方法一定是结束于后执行的方法
      • 栈中的每一个元素被称为栈桢
        • 局部变量表(存储局部变量,如果是类方法,下标从0开始,如果是普通方法,下标从1开始,0存储的是this)
        • 操作数栈(存、取数据)
        • 动态链接(符号引用转换成直接引用 [非常量池])
        • 方法的返回地址(正常或者异常)

    思考:如果add方法是一个递归方法,会被压栈几次呢?当然是多次!

    • 本地方法栈
      • ​​​​​​​执行native方法的栈(native修饰的方法)
    • 程序计数器
      • ​​​​​​​Java虚拟机可以支持多线程同时执行,每一个Java虚拟机线程都会有自己的PC Register,为了记录执行的位置。PC Register记录当前线程执行的方法所在的地址。下一次就可以从这个地址获取内容继续执行了。

     问题

         不管是栈还是堆,都是有大小的,不够的情况怎么办?

    1. 对这些区域进行垃圾回收。
    2. 如果回收不掉,或者依然不够,抛出OOM 异常,堆的话还会抛出StackOverFlowError。
  • 相关阅读:
    Python函数传递参数
    51单片机定时器
    项目日历是什么?如何规划?
    新四级冲刺需牢记的700核心词
    3Dmax中VR渲染太阳光渲染参数怎么设置?渲染100云渲染助力
    创新学习方式,电大搜题助您迈向成功之路
    思科认证和华为认证到底选择哪个更合适啊?
    OceanBase CEO杨冰:小就是大,构建企业核心竞争力
    CSS中去掉li前面的圆点方法
    Naopore基因组数据组装软件---NECAT下载试用
  • 原文地址:https://blog.csdn.net/m0_37998944/article/details/126354759