标签:
我们从编译原理讲起,不同的开发环境、开发语言都会有不同的策略。一般来说,程序运行时有三种内存分配策略:静态的、栈式的、堆式的
静态存储
是指在编译时就能够确定每个数据目标在运行时的存储空间需求,因而在编译时就可以给它们分配固定的内存空间。
这种分配策略要求程序代码中不允许有可变数据结构的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间。
栈式存储
栈式存储分配是动态存储分配,是由一个类似于堆栈的运行栈来实现的,和静态存储的分配方式相反。
在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到了运行的时候才能知道,但是规定在运行中进入一个程序模块的时候,必须知道该程序模块所需要的数据区的大小才能分配其内存。和我们在数据结构中所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。
堆式存储
堆式存储分配专门负责在编译时或运行时,无法确定存储要求的数据结构的内存分配。
比如可变长度串和对象实例,堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放。
java的内存分配主要是以堆栈为主,具体如下:
了解java内存模型看这里:java内存模型是什么样的
了解jvm实例结构看这里:jvm实例的结构是什么样的
了解jvm如何管理内存看这里:[jvm是如何管理内存的][4]
[4]:
Java千百问_07JVM架构(003)_内存分配有哪些策略
标签:
原文地址:http://blog.csdn.net/ooppookid/article/details/51469703