浅谈java中的堆栈(一)

本文深入解析Java中的内存管理机制,包括堆内存与栈内存的区别及其使用场景。详细介绍了heap(堆)、stack(栈)、datasegment(数据段)和codesegment(代码段)等内存区域的功能,并通过实例说明了对象在不同内存区域的存储方式。

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

Java把内存分成两种,一种叫做堆内存,一种叫做栈内存:在执行过程中会划分4个内存区域(heap、stack、data segment、code segment)。

java开始执行会把代码加载到code segment区域然后找到main方法开始执行;

heap(堆):new出来的东西放到这里;
stack(堆栈):局部变量;
data segment:静态变量或字符串常量;
code segment:存放代码;

 

举例:

Student stu = new Student();
//stu是对象Student()的引用,stu存放在栈中,可以把stu理解为一个指针,指向所存放在堆中的对象.
//当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,
//java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用.
//堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.

  简述下堆与栈的区别:

1.stack(堆栈)的空间由操作系统自动分配和释放,heap(堆)的空间是手动申请和释放的,heap常用new关键字来分配。

2.stack(堆栈)空间有限,heap(堆)的空间是很大的自由区。

3.在Java中,若只是声明一个对象,则先在栈(stack)内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。

举例:

Object a =null;//这样定义的在栈区,只在栈内存中分配空间.
Object b =new Object(); //这样定义的就在堆区,在堆内存中分配空间.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值