java中堆和栈的不同

内存区域主要分为堆、栈、代码区和数据区

其中代码区主要存放程序中的二进制代码

数据区主要用于存放常量数据。

java中的堆和栈都是内存的一部分。它们之间的区别主要体现在以下方面。

1、分配时机的不同
对于栈和堆来说都是运行时分配存储空间,但是栈是在进入代码区域的时候就要确定需要分配的存储空间的大小。而堆可以在运行过程中动态的分配内存空间大小,如动态创建对象。
2、存储内容的不同
栈主要用来存放局部变量和方法调用。堆主要用来存放创建的对象和数组。
3、是否能够共享
栈中的数据可以共享,当向栈中放入数据的时候,首先放一个变量名的引用,然后查找栈中是否已经有该数据,如果有该数据就将该引用指向该数据,如果没有就将该数据插入到分配的栈空间。
4、可见范围的不同
每个线程都有自己独立的栈空间,所以每个线程的栈空间是线程独有的。所以栈内存是线程的独有内存。而堆内存中的对象对于所有线程可见。
5、大小不同
一般堆内存要远远大于栈内存
6、出错的异常信息不同
如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError。而如果是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值