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(); //这样定义的就在堆区,在堆内存中分配空间.
本文深入解析Java中的内存管理机制,包括堆内存与栈内存的区别及其使用场景。详细介绍了heap(堆)、stack(栈)、datasegment(数据段)和codesegment(代码段)等内存区域的功能,并通过实例说明了对象在不同内存区域的存储方式。
534

被折叠的 条评论
为什么被折叠?



