本文为原创文章,转载请注明出处
查看[Java]系列内容请点击:https://www.jianshu.com/nb/45938443
什么是堆内存?
简单来说,堆内存就是一个自由的内存区,对于这块内存区,程序具有相当自由的操作权限,可以自己申请使用。
什么是栈内存?
与堆内存相比,程序对于栈内存的使用就没有那么自由,我们在学习C语言的时候都知道,C语言在调用一个函数的时候,需要将当前函数的运行环境数据压入栈中进行存储,当从被调用的函数返回的时候,就从这个栈中弹出原来压入的数据,恢复运行环境,从而继续执行当前函数。
以此类推,栈内存就是用来存储程序中的临时变量、基本类型等数据的内存区间,这些数据属于程序本身的部分,不属于程序额外申请的内存。这部分内存的分配也由运行环境自动分配。
Java中的数据存在哪里?
一个比较简单的区分:
- 对象和数组等都存储在堆内存中,因为这部分内存空间是动态获取的。
- 基本数据类型、方法中参数的基本数据类型数据等都存储在栈内存中,属于程序自身的部分。
栈内存大小在Java虚拟机加载程序的时候就已经知道了,而堆内存大小需要等到运行到相应的程序的时候才能知道。
网友评论