小饶学编程之JAVA SE第一部分——面向对象:内存分析详解(栈、堆和方法区)程序执行的内存变化过程

本文详细介绍了Java虚拟机(JVM)的内存模型,包括栈、堆和方法区的特性与作用。栈主要用于方法执行的内存模型,每个方法调用会创建一个栈帧;堆用于存储对象,是所有线程共享的;方法区存储类和常量信息。通过一个案例展示了对象创建及内存变化的过程,帮助理解JVM内存管理。
摘要由CSDN通过智能技术生成


java虚拟机(JVM)的内存可以划分为三个区域:栈stack、堆heap、方法区method area。

一、栈

  • 1.栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
  • 2.JVM为每个线程创建了一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
  • 3.栈属于线程私有,不能实现线程间的共享!
  • 4.栈的存储特性是“先进后出,后进先出”。举例:子弹夹,先放进的子弹后射,后放进的子弹先射。
  • 5.栈是由系统自动分配,速度快!栈是一个连续的内存空间!
    举例:
    当调用方法1时,就在线程的栈空间里面创建一个栈帧(栈帧可以存储局部变量、操作数、方法出口等);当调用方法2时,就在方法1的栈帧上面创建一个新的栈帧;当调用方法3时,就在方法2的栈帧上面创建一个新的栈帧;
    当方法3执行完之后,关闭方法3,然后弹出;当方法2执行完之后,关闭方法2,然后弹出;当方法1执行完之后,关闭方法1,然后弹出;
    当线程执行完之后,整个栈空间就被干掉。
    在这里插入图片描述

二、堆

  • 1.堆用于存储创建好的对象(数组也是对象)
  • 2.JVM只有一个堆,被所有线程共享
  • 3.堆是一个不连续的内存空间,分配灵活,速度慢!

在这里插入图片描述
红色的小块指的是对象

三、方法区(静态区)

  • 1.JVM只有一个方法区,被所有线程共享
  • 2.方法区实际也是,只是用于存储类、常量相关的信息!
  • 3.用来存放程序中永远不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

四、案例

下面展示 实现类代码片

public class SxtSu {
    int id;
    String sname;
    int age;
    Computer comp;//计算机

    void study(){
        System.out.println("我在认真学习!使用电脑:"+comp.brand);
    }
    void play(){
        System.out.println("我在玩游戏!");
    }

//无参构造方法,用于创建这个类的对象
    public SxtSu() {
    }

    public static void main(String[] args) {
        SxtSu stu = new SxtSu();//创建了一个对象,相当于调用了SxtSu类的构造方法。
        System.out.println(stu);
        stu.id=1001;
        stu.sname="饶帅";
        stu.age=18;

        Computer c1=new Computer();
        System.out.println(c1);
        c1.brand="联想";
        stu.comp=c1;

        stu.play();
        stu.study();
    }


}
class Computer{
    String brand;//品牌

}

输出结果
在这里插入图片描述

五、内存变化过程

在这里插入图片描述

过程解释

  • 1.程序先执行静态的属性、方法和字符串变量
  • 2.然后调用静态的main方法并创建栈帧,存储局部变量stu=null和c1=null
  • 3.然后调用SxtSu类的构造方法并创建栈帧,在堆中创建一个对象并赋值,使用完之后就弹出(1540e19d是SxtSu的地址值)
  • 4.然后调用Computer类的构造方法并创建栈帧,在堆中创建一个对象并赋值,使用完之后就弹出(677327b6是Computer的地址值)
  • 5.study()和paly()方法执行过程省略
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱喝皮蛋瘦肉粥的小饶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值