JVM的内存模型和案例图,类加载顺序

1.主要是分为6个区域:

1.栈(Java 虚拟机栈stack):方法【运行时】所进入的区域,里面还会存储程序的局部变量

2.堆(Heap):凡是New出来数据的都会进入堆中

3.方法区(Method Area):字节码文件加载时所进入的内存,用于存储所谓的元(Meta)数据,例如类结构信息,以及对应的字段(如成员属性)、方法代码等,分为静态区和非静态区

4.本地方法区(本地方法栈,Native Method Stack):native修饰的方法都会进入其中,主要是调用的是操作系统的相关资源

5.程序计数器:在 JVM 规范中,每个线程都有它自己的程序计数器,并且任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。

程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行本地方法,则是未指定值(undefined)

6.运行时常量池(JDK1.7以前在方法区中,从JDK1.7开始,常量池区域是存在于堆中)

如下图的内存结构图(注:此图是JDK1.7以前的版本)

注:Intern 字符串的缓存和静态变量曾经都被分配在永久代上,而永久代已经被元数据区取代。但是,Intern 字符串缓存和静态变量并不是被转移到元数据区,而是直接在堆上分配,所以这一点同样符合前面一点的结论:对象实例都是分配在堆上。

2.不同的数据使用的是哪一块空间

3.类加载顺序

  1. 首先加载父类的静态字段或者静态语句块
  2. 子类的静态字段或者静态语句块
  3. 父类的普通变量以及语句块
  4. 父类的构造方法被加载
  5. 子类变量或者语句块被加载
  6. 子类构造方法被加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酆都小菜鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值