JVM内存模型

一、JVM简述

  1. 个人对JVM的理解:是一个专门运行Java程序的小型操作系统,随着程序的启动而启动,结束而结束
  2. JVM的组成:
    1. 线程共享的区域:
      1. 方法区:存放instanceKlass元数据、常量、静态变量
      2. 堆:存放对象,包括:对象头、元数据指针、实例数据
    2. 线程独享的区域:
      1. 栈:存放方法的局部变量表、操作数栈、动态链接、方法出口

二、JVM加载对象举例

  1. 举例代码:
	A a=new A();
    public Class A{
        public int x;
        public B b;
        public static int y;
        public string s;
        public void test(){ 
            int i=1;
            i++;
            C c=new C();
        }
    }
  1. 具体步骤:
    1. main方法放入线程栈帧,加载类A

      1. 在方法区中生成A的instanceKlass,表示其元数据,里面存放A的类型信息、常量、字段信息、方法信息、静态变量、静态链接
      2. 并在堆中创建对应的instanceOopDesc来表示java.lang.Class对象,里面存放A类的镜像Class对象,包括对象头、元数据指针、实例数据
      3. 在堆的Class对象中初始化静态变量
      4. 在堆中生成对象a,并作为局部变量表中a的引用
    2. 上述过程中会加载类B,过程与加载类A一样

    3. test方法加载到线程栈帧中,并执行:

      1. 局部变量表给局部变量赋值,操作数栈中操作 ++ 操作
      2. 加载类C,过程与加载类A一样
      3. 在堆中生出对象c,作为局部变量表中c的引用,即为动态链接
  2. 图例解释:
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值