Java入门学习理解(一)heap 和 stack 的区别

heap 和 stack 的区别

heap(堆)空间是手动申请和释放的

参数stack(栈)heap(堆)
JVM内存指令区内存数据区
速度
存放内容基本数据类型、变量名、常量对象
顺序先进后出先进先出
空间
  1. Heap是 Stack的一个子集.------扩展—>从内存观点考虑。
  2. Stack存取速度仅次于寄存器,存储效率比heap高,可共享存储数据,但是其中数据的大小和生存期必须在运行前确定。
  3. Heap是运行时可动态分配的数据区,从速度看比Stack慢,Heap里面的数据不共享,大小和生存期都可以在运行时再确定。
  4. new关键字 是运行时在Heap里面创建对象,每new一次都一定会创建新对象,因为堆数据不共享。
    参考自 Java中Heap与Stack的区别

个人简单理解,常量、临时变量、方法名存放在stack(栈)中,使用类似Map方式存放,存放变量名和对应的在heap(堆)中的地址,两者都处于计算机运行内存中。
当我们复制的时候:

@Data
public class Hero{
	private String name;
}
public void copy(){
	Hero A = new Hero();
	A.setName("小黑");
	/*此时stack(栈)中存放A这个对象名称,实际数据保存在heap(堆)中,
	* 栈中的 A 指向 堆 中的物理地址
	* */
	Hero B  = A;
	/* 当我们想进行复制时,此时复制的只是栈中A存放的物理地址,
	* 也就是说B和A指向的是同一个堆中的地址,当我们修改A的值时,B也会被修改
	* 我们需要B和A不同的时候,就需要 
	* */
	Hero B = new Hero(); 
	/* 重新给B分配一个heap(堆)中的地址,然后将A中的值set到B中,
	* 还有其他对象的复制方式,我这边只是举个例子
	* */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值