stack 和heap

本文深入探讨Java中的stack和heap内存管理机制,解析两者的特性、优势及劣势,并通过具体示例说明Java如何自动管理这些内存区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大概三四个月前

准备面试时补习班老师给了我这个链接

Java 面试题:百度前200页都在这里了
http://www.importnew.com/27326.html

我试着爬文找答案

虽然没完成但总之也整理了一些资讯

先从stack 跟heap 开始…

stack:

1.stack在记忆体中用来存放可以预测生命周期的资料
以便作业系统管理,
可以想成一层一层堆起来的盒子里面会存放数值型别的变数或是引用,
当变数生命周期结束盒子就会被移走

2.如果管理的不好会产生stackoverflow

3.生命周期在scope内{ 这里面}也就是说跑到底就结束

heap

1.可动态申请之内存空间

2.java中new XXX()物件全部会放到heap中
一旦garbage collection system侦测到某对象没被引用就会销毁此物件

3.可想成在某个公园摆放得一团乱的盒子
物件参照会放到stack中的某个盒子,相对应的物件实体会放到公园中的某个空盒子
当物件实体生命周期结束,不再被引用,
就会被系统标注没人使用最后再把它删除

比较:

1.stack
优势:存取速度比heap还快
缺点: stack中存的数据大小生命周期都要固定缺乏灵活性

2.heap
优势:动态分配内存大小,生命周期不用告诉编译器
缺点:运行时要动态分配内存所以运行速度较慢

3.stack与heap一样
在java都是程式自动管理无法自行设定stack或是heap

4.stack存八大基本资料:
int, short, long, byte, float, double, boolean, char
数据还可共享

比如int a=3; int b =3;
此时
系统会先在stack创立reference (参照类型) a然后找有没有字面值为3的地址
没有的话
会自己创一个再将a指向它
接着创造reference b ,看到有字面值3的地址就指向它
改b = 4也不会删掉3这个字面值,系统会新增一个4的字面值在stack然后再让b指向它

5.wrapper会将资料存在heap
但String比较特殊
String a = “abc”; String b=”abc”;
String c = new String(“abc”); String d = new String(“abc”);
这样的情况下
a==b成立,会在stack共用abc
c==d就不成立,因为两者都会各新增一个实例再让reference指向它们

6.Integer i = 3底层会转为Integer i = new Integer(3)
这点跟String不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值