引自 http://www.cnblogs.com/chaoguo1234/archive/2013/03/19/2968409.html
在Java中, 方法的调用以及方法里面声明的局部变量和参数,都存在于叫栈的内存块之中。当你调用一个方法的时候,这个方法就会放在调用栈的栈顶,也就是说放在栈顶的目 前正在执行的方法。实际上被堆上栈的是堆栈块,它带有方法的状态,包括程序执行到哪一行以及所有局部变量的值:
方法里面的局部变量,既包括基本数据类型,也包含对对象的引用变量,它们都存在于栈中。在Java中,对象本身只存在于叫堆的内存块之中:
与局部变量不同,实例变量存在于其对象所属的堆空间上。如果实例变量是基本数据类型,那么Java会预留相应大小的存储空间,但如果实例变量是对象的引用呢?此时,java也只是预留该引用所需的存储空间,至于是否要在堆上为该引用所指的对象开辟存储空间,要依情况而定:
1 例如: private Antenna ant;只是声明变量而不赋值,那么不会为该引用所指对象开辟空间
2 例如: private Antenan ant = new Antenna();那么就会为该引用所指对象开辟存储空间
Life和scope的区别
life:只要变量还在栈上,变量就活着,也就是说活到方法执行完毕为止。
scope:局部变量的范围只局限于声明它的方法之内,当该方法调用别的方法时,该局部变量虽然还活着,但是却不在目前范围内。执行其他方法完毕返回后,该变量的范围也就回来了。
当局部变量
当局部变量还活着的时候,它的状体就会被保存,但是只有在自己的范围中,也就是在声明自己的方法中才能被使用。
这个规则既适用于基本数据类型的局部变量,也适用于是对象引用的局部变量。
相关推荐
堆和栈是计算机内存管理中的两个重要概念,它们在程序执行过程中起着至关重要的作用。在深入探讨这两个概念之前,我们需要明确一点:堆和栈在内存结构上有着本质的区别。 栈(Stack)是一种线性数据结构,其特点是...
- **大小与生存期确定**:栈中存储的数据大小和生命周期在编译时即可确定,缺乏灵活性。 - **数据可以共享**:栈中的数据(特别是基本类型)可以被多个变量引用,从而实现数据共享。 #### 2. 堆(Heap) 堆是Java...
在C++编程语言中,根据变量的存储方式和生命周期,可以将内存区域大致分为四个部分:静态存储区、栈、堆以及未初始化的数据段(BSS)。其中,静态存储区、栈与堆是程序运行时频繁使用的三个重要内存区域。本文将重点...
栈中的数据大小和生存期在编译时就已经确定,所以对于需要快速存取和生命周期短暂的数据,栈是理想的选择。 堆内存则更为灵活,它用于存储那些在运行时动态分配大小的对象。通过new操作符创建的对象和数组都存储在...
"Java 堆和栈的区别" Java 堆和栈是 Java 中的两种内存管理机制,它们都是 Java 用来在 RAM 中存放数据的地方。但是,它们有很多不同之处。 Java 堆是一个运行时数据区,类的对象从中分配空间。这些对象通过 new、...
而栈中的数据大小和生存期必须预先确定。 4. **垃圾回收**:堆需要垃圾回收机制来管理不再使用的对象;栈则不需要,因为随着线程结束,栈自然释放。 #### 六、特殊情况:String类型 String类型在Java中具有特殊的...
堆和栈的第一个区别就是申请方式不同:栈是系统自动分配空间的,而堆是程序员根据需要自己申请的空间。栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再...
Java中的堆和栈是两种不同的内存区域,它们在程序运行时承担着不同的职责。栈主要用于存储基本类型变量和对象的引用,而堆则用于存储对象实例。了解它们的区别对于优化程序性能至关重要。 栈(Stack): 1. 栈是...
Java 中的堆和栈是两个不同的内存区域,分别用于存放不同类型的数据。堆是一个运行时数据区,类的对象从中分配空间,通过new、newarray、anewarray 和 multianewarray 等指令建立,垃圾回收器会自动收走这些不再使用...
栈内存中的数据大小和生存期在编译时是确定的,这使得它非常适合存储基本类型(如`int`, `double`, `boolean`等)和对象的引用。但是,栈内存不允许动态分配内存,因此其灵活性较低。 堆内存则提供了动态内存分配的...
2. 存储空间:栈的空间有限,通常为几MB;堆空间较大,取决于系统的实际内存。 3. 内存效率:栈内存分配和释放速度快,而堆内存操作相对较慢。 4. 管理方式:栈由系统自动管理,堆则需程序员自己管理,可能导致内存...
栈中的数据生存空间一般在当前 scopes 内(即由 {…} 括起来的区域)。栈的优势是,存取速度比堆要快,仅次于直接位于 CPU 中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 堆(heap...
Java 中的堆和栈 Java 中的堆和栈是 Java 语言中两个重要的内存区域,它们扮演着不同的角色,管理着 Java 程序中的内存分配和释放。 堆(Heap) 堆是一个运行时数据区,用于存放由 new 创建的对象和数组。Java ...
然而,栈的局限性也很明显,即存储在栈中的数据大小和生存周期必须是确定的,这意味着它缺乏堆所提供的灵活性。此外,栈中的数据可以共享,这一点将在后续部分详细讨论。 #### 堆的灵活性与代价 与栈相比,堆的...
栈中的内存分配和释放是自动的,当变量的作用域结束时,Java会自动释放掉为该变量所分配的内存空间。栈的优点是存取速度快,缺点是存在栈中的数据大小和生存期必须是确定的,缺乏灵活性。 堆(Heap)是另一块内存...
2. **栈**:每个线程都有自己的程序计数器和一个独立的栈空间,用于存储方法调用时的局部变量、操作数栈、动态链接等信息。当方法调用结束,对应的栈帧会被弹出栈。 3. **方法区**:存储类的信息,如类名、方法信息...
静态存储区、堆、栈在C/C++语言中的应用和区别 静态存储区、堆和栈是C/C++语言中三种不同的内存分配方式,它们之间有着不同的特点和应用场景。 一、静态存储区 静态存储区是在程序编译时就已经分配好的内存空间,...
栈式分配适用于生命周期短、生存期确定的变量,而堆式分配则适合于需要动态分配和管理内存的对象和数组。Java通过结合这些策略,为开发者提供了自动内存管理的便利,同时也保证了程序的健壮性和安全性。
在Java编程语言中,堆和栈是两种主要的内存区域,它们各自有不同的功能和特点。了解它们的区别对于优化程序性能和避免内存泄漏至关重要。 **堆(Heap)** 堆是Java运行时数据区的一部分,主要用于存储对象实例。当...