JAVA基础知识回顾-----Java堆内存和栈内存-----随想随写

Java堆内存和栈内存

 栈内存

   通常我们知道,Java栈内存一般用来存储基本数据类型的变量和对引用数据类型的引用;如果程序在执行过程中,超过了变量的作用域范围,栈中存储的变量或引用就会自动释放;而这个释放过程是与Java垃圾回收器无关的;

堆内存

   堆内存通常用来存储通过new字符创建的对象或数组,而堆中分配的内存是由垃圾回收器来管理的;一般来说,我们先通过new字符在堆中开辟一块内存空间,然后再在栈中定义一个引用变量来指向堆内存中对象的首地址;

栈内存中的变量  和 堆内存中对象  的生命周期的区别

   其实栈是程序执行的一个流程,当栈中的变量或引用超过生命周期后就会自动被系统释放,而堆中的内存不一样,堆中的对象即使在程序中不使用也会立即释放,他的释放时间是由Java虚拟机来决定的;

Java中的内存分配策略

   分为三种,静态分配,栈式分配,堆式分配

   静态分配:在编译的时候就知道数据目标所需的存储空间,因而在编译的时候就可以为其分配具体的内存空间。这种分配策略要求程序代码中不允许有可变的数据结构(比如数组)的存在;

   栈式分配:在编译时无法确定内存空间大小,但是在程序模块的入口处知道其存储大小;栈式存储是按照先进后出的原则进行分配的;

   动态存储 :在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例.堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放.

栈和堆优劣分析

  栈中存储的变量:缺点-生命周期和大小确定,优点-存取速度快,栈数据可以共享

  堆中存储的变量:缺点-存取速度慢,优点-可以动态分配内存,生命周期不确定

猜你喜欢

转载自ye-wolf.iteye.com/blog/2316784