【jvm】如何理解栈管运行堆管存储

目录

        • 一、栈(Stack)管运行
          • [1.1 说明](#1.1 说明)
          • [1.2 方法调用](#1.2 方法调用)
          • [1.3 局部变量](#1.3 局部变量)
          • [1.4 控制流](#1.4 控制流)
        • 二、堆(Heap)管存储
          • [2.1 说明](#2.1 说明)
          • [2.2 对象存储](#2.2 对象存储)
          • [2.3 垃圾回收](#2.3 垃圾回收)
          • [2.4 动态扩展](#2.4 动态扩展)
        • 三、总结
一、栈(Stack)管运行
1.1 说明
  • 1.栈主要管理的是方法的执行和局部变量。
  • 2.当JVM执行一个Java程序时,它会为每个线程创建一个私有的栈(称为Java栈或虚拟机栈)。这个栈用于存储线程执行过程中的方法调用和局部变量等信息。
1.2 方法调用
  • 1.每当线程调用一个方法时,JVM就会在栈上为该方法的执行创建一个新的栈帧(Stack Frame)
  • 2.栈帧包含了方法的局部变量表操作数栈动态链接返回地址等信息。
  • 3.这个栈帧的创建标志着方法的开始执行,而栈帧的销毁则标志着方法的执行结束。
1.3 局部变量
  • 1.方法中的局部变量(包括基本数据类型对象引用)都存储在栈帧的局部变量表中。
  • 2.这些变量在方法执行期间有效,并在方法执行完毕后被销毁。
1.4 控制流
  • 1.栈还通过后进先出(LIFO)的原则支持方法的调用和返回。
  • 2.当方法调用另一个方法时,新的栈帧会被压入栈顶;当方法执行完毕时,栈顶的栈帧会被弹出,控制权返回到上一个栈帧对应的方法中。
二、堆(Heap)管存储
2.1 说明
  • 1.堆是JVM中用于存储对象实例数组的内存区域。
  • 2.与栈不同,堆是线程共享的,即多个线程可以访问同一个堆中的对象。
2.2 对象存储
  • 1.当Java程序创建一个新的对象时,JVM会在堆上为该对象分配内存空间。
  • 2.对象在堆中的存储位置是通过一个引用(即对象的内存地址)来访问的。
2.3 垃圾回收
  • 1.堆上的内存分配和释放是由垃圾回收器(Garbage Collector, GC)自动管理的。
  • 2.GC会定期扫描堆中的对象,识别出那些不再被任何引用所指向的对象(即垃圾对象),并回收它们所占用的内存空间。
2.4 动态扩展
  • 1.堆的大小可以在运行时根据需要动态地扩展和收缩
  • 2.这种灵活性使得JVM能够处理不同大小和复杂度的Java程序。
三、总结
  • 1.JVM通过栈来管理方法的执行和局部变量的生命周期,确保每个线程都有自己独立的执行环境。
  • 2.通过堆来管理对象实例和数组的存储,实现跨线程的数据共享和垃圾回收。
  • 3.这种设计使得Java程序既能够高效地执行方法调用和局部变量操作,又能够灵活地管理对象实例和数组的内存分配和释放。
相关推荐
plainGeekDev1 小时前
Android运行时面试题:ART和JVM的区别都搞不清,别写精通了
jvm·面试·kotlin
疯狂打码的少年6 小时前
CISC vs RISC 对比
jvm·笔记
逻极9 小时前
Java 从入门到精通:核心原理、最佳实践与性能优化
java·jvm·并发编程·集合框架
light blue bird10 小时前
Razor Pages工序管理Web端界面化实现方案
jvm·windows·web端
小江的记录本21 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
ID_180079054731 天前
小红书评论 API 接口详解与实战开发
java·jvm·c++
東雪木1 天前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
Undergoer_TW1 天前
Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
jvm·数据库·sqlite