Java基础:JVM中的堆和栈的理解

问题:栈是什么?

  • 栈是一种数据结构,特性是先进后出。
  • 栈是配合程序(线程)执行的结构体,也就是说程序的执行不能没有栈,但是可以没有堆。
  • 程序执行时,栈的作用流程:执行下面代码时,栈的操作流程
int add(a, b){ return a+b;} 
int a = 1; 
int b = 2; 
int c = add(a,b); 

在这里插入图片描述

  1. 1和2进行压栈。
  2. 预留c的值位置压栈。
  3. 调用程序,预留返回位。
  4. 将传入的值压栈,计算出值后,将值赋到c上。
  5. 返回指针位(不删除数据,而是调整指针位进行覆盖)。

问题:堆是什么?

  • 最关键的概念:JVM中的堆并不是一种数据结构,而是所有数据结构存放的地方。而数据结构中的堆是一种树状数据结构(最小堆、最大堆)。
  • JVM中的堆提供了存储数据的能力(申请内存、回收内存、托管内存)。
  • GC是堆的管控者。

问题:堆和栈的关系是什么?

  • 栈中的引用会指向堆中的实例,但是栈并非不能放数据,它是可以存放临时数据(很小的数据)。
  • 内存分配层面:堆从低位到高位分配内存,栈从高位到低位分配内存,中间部分就是未被分配的可分配空间。
    在这里插入图片描述

问题:JVM中的内存布局是怎样的?

  • 栈中引用的数据存放在栈中。
  • 栈中的对象实例的元数据(类信息、编译后的代码、常量)存放在方法区(旧意义上的永久代)。
  • 本地内存主要存放的是:引用的Native对象(C/C++中的数据),对象和操作系统内核间通过内存映射构造的缓冲区。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萌白在努力

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

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

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

打赏作者

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

抵扣说明:

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

余额充值