堆和栈

OC是程序中最基本的存储单位,包括变量名,变量类型和作用域;

堆栈主要功能是暂时存放数据和地址;

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值局部变量的值等。其操作方式类似于数据结构中的栈。

    特征:先进后出;

    运算:运算受限的线性表,只允许在表的一端进行插入和删除操作

      过程:向一个栈插入新元素称为入栈,删除一个元素称为出栈或退栈

 例: 栈S为(a,b,c),字符c为栈顶元素,若向S压入一个元素d

则S变为(a,b,c,d)d变为栈顶元素,若直接删除2个元素,则首先删除元素d,再删除元素c,栈为(a,b)栈顶元素为b

栈内存:基本类型的变量。 和   对象的引用变量     都是在函数的栈内存中分配;

 释放:

       当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间

 特征:

       存取速度比堆要快,仅次于寄存器,栈数据可以共享

       存在栈中的数据大小与生存期必须是确定的,缺乏灵活性


 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

堆内存:

    用于存放由new创建的对象。 和   数组,内存的分配由Java虚拟机的自动垃圾回收器来管理

释放:

数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍 然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走

特点:

    动态地分配内存大小,生存期也不必事先告诉编译器

    在运行时动态分配内存,存取速度较慢


总:从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的



静态存储分配: 

指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间

    特征:确定的存储空间

       代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现


队列、堆、栈:

队列是先进先出:

栈:只是指一种使用堆的方法(即先进后出)。

堆:动态分配内存


String

String str = new String("abc");----(1)

 String str = "abc";------(2)

分析:1.第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。

          2. 是先在栈中创建一个对String类 的 变量str,然后通过符号去字符串常量池 里找有没有"abc",

       如果没有,则将"abc"存放进字符串常量池 ,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。


栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要 在运行时动态分配内存,存取速度较慢。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值