堆和栈的区别?

 

java把内存划分为两种:堆内存 和 栈内存

 

堆内存:用来存放由 new 创建的对象和数组。

栈内存:用来存放基本数据类型的变量和对象的引用变量

 

堆(heap)

特点:动态的分配内存大小,所存储的数据生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。

        因此,用堆保存数据时会得到更大的灵活性。

      然而,面向对象的多态性,堆内存分配是必不可少的,因为多态变量所需的存储空间只有在运行时创建了对象之后才能确定。

缺点:由于要在运行时动态分配内存,所以存取速度较慢。

      为什么呢?

   因为堆是应用程序在运行的时候请求操作系统分配给自己内存,

   由于从操作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低.

 

栈(stack)

特点:1,存取速度快,仅次于CPU中的寄存器。

   2,栈中的数据是可以共享的。

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

 

所以:在建立一个对象时,会从两个地方都分配内存,

   在堆中存放建立这个对象,

   而在栈中存放一个指向这个堆对象的指针(引用)。

 

通俗来讲就是堆主要用来存放对象的,栈主要是用来执行程序的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值