【摘要】 问题:栈是什么?
栈是一种数据结构,特性是先进后出。栈是配合程序(线程)执行的结构体,也就是说程序的执行不能没有栈,但是可以没有堆。程序执行时,栈的作用流程:执行下面代码时,栈的操作流程
int add(a, b){ return a+b;}
int a = 1;
int b = 2;
int c = add(a,b);
12341和2进行压栈。预留…
问题:栈是什么?
- 栈是一种数据结构,特性是先进后出。
- 栈是配合程序(线程)执行的结构体,也就是说程序的执行不能没有栈,但是可以没有堆。
- 程序执行时,栈的作用流程:执行下面代码时,栈的操作流程
int add(a, b){ return a+b;}
int a = 1;
int b = 2;
int c = add(a,b);
- 1和2进行压栈。
- 预留c的值位置压栈。
- 调用程序,预留返回位。
- 将传入的值压栈,计算出值后,将值赋到c上。
- 返回指针位(不删除数据,而是调整指针位进行覆盖)。
问题:堆是什么?
- 最关键的概念:JVM中的堆并不是一种数据结构,而是所有数据结构存放的地方。而数据结构中的堆是一种树状数据结构(最小堆、最大堆)。
- JVM中的堆提供了存储数据的能力(申请内存、回收内存、托管内存)。
- GC是堆的管控者。
问题:堆和栈的关系是什么?
- 栈中的引用会指向堆中的实例,但是栈并非不能放数据,它是可以存放临时数据(很小的数据)。
- 内存分配层面:堆从低位到高位分配内存,栈从高位到低位分配内存,中间部分就是未被分配的可分配空间。
问题:JVM中的内存布局是怎样的?
- 栈中引用的数据存放在栈中。
- 栈中的对象实例的元数据(类信息、编译后的代码、常量)存放在方法区(旧意义上的永久代)。
- 本地内存主要存放的是:引用的Native对象(C/C++中的数据),对象和操作系统内核间通过内存映射构造的缓冲区。
文章来源: blog.csdn.net,作者:萌白在努力,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/k295330167/article/details/115912783
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END