超级实习生计划学习打卡—初识JVM数据存储区域

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

对于Java运行时涉及到的数据存储区域主要包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。​

1.程序计数器
线程是CPU 调度的基本单位。在多线程情况下,当线程数超过 CPU 数量或CPU内核数量时,线程之间就要根据 时间片轮询抢夺 CPU 时间资源。也就是说,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。


因此,为了线程切换后能够恢复到正确的执行位置, 每条线程都需要一个独立的程序计数器去记录其正在执行的字节码指令地址。


2.Java虚拟机栈
描述的是 Java 方法执行的内存模型,是 线程私有 的。 每个方法在执行的时候都会创建一个栈帧 ,用于存储局部变量表、操作数栈、动态链接、方法出口等信息,而且 每个方法从调用直至完成的过程,对应一个栈帧在虚拟机栈中入栈到出栈的过程。其中,局部变量表主要存放一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄,它们可以是方法参数,也可以是方法的局部变量。

3.本地方法栈
本地方法栈与 Java 虚拟机栈非常相似,也是 线程私有 的,区别是虚拟机栈为虚拟机执行 Java 方法服务,而本地方法栈为虚拟机执行 Native 方法服务。


4.Java堆
存放对象实例 ,几乎所有的对象实例(和数组)都在这里分配内存。 Java 堆是 线程共享 的,类的对象从中分配空间,不需要程序代码来显式的释放。

5.方法区
与 Java 堆一样,也是线程共享的并且 不需要连续的内存 ,其用于存储 已被虚拟机加载的类信息、常量、静态变量等数据。
例子

public class Information {
    public static void main(String[] args) {
        int num = 100;
        new Information().setinfor(a);
    }
    public void setinfor(int a) {
        int cnt = 10;
        Student stu = new Student();
        stu.id = 2120020201;
        stu.name = "zengjie";
    }
}
class Student {
    int id;
    String name;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值