`
宇宙浪子
  • 浏览: 48102 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

栈和堆:生存空间

    博客分类:
  • java
阅读更多

引自  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:局部变量的范围只局限于声明它的方法之内,当该方法调用别的方法时,该局部变量虽然还活着,但是却不在目前范围内。执行其他方法完毕返回后,该变量的范围也就回来了。

当局部变量

当局部变量还活着的时候,它的状体就会被保存,但是只有在自己的范围中,也就是在声明自己的方法中才能被使用。

这个规则既适用于基本数据类型的局部变量,也适用于是对象引用的局部变量。

  • 大小: 94.3 KB
  • 大小: 120.1 KB
  • 大小: 100 KB
  • 大小: 157.1 KB
  • 大小: 190.8 KB
分享到:
评论

相关推荐

    堆和栈详解

    堆和栈是计算机内存管理中的两个重要概念,它们在程序执行过程中起着至关重要的作用。在深入探讨这两个概念之前,我们需要明确一点:堆和栈在内存结构上有着本质的区别。 栈(Stack)是一种线性数据结构,其特点是...

    关于Java栈与堆的思考

    - **大小与生存期确定**:栈中存储的数据大小和生命周期在编译时即可确定,缺乏灵活性。 - **数据可以共享**:栈中的数据(特别是基本类型)可以被多个变量引用,从而实现数据共享。 #### 2. 堆(Heap) 堆是Java...

    C++ 静态存储区 栈 堆的区别.txt

    在C++编程语言中,根据变量的存储方式和生命周期,可以将内存区域大致分为四个部分:静态存储区、栈、堆以及未初始化的数据段(BSS)。其中,静态存储区、栈与堆是程序运行时频繁使用的三个重要内存区域。本文将重点...

    Java机制下的栈和堆.pdf

    栈中的数据大小和生存期在编译时就已经确定,所以对于需要快速存取和生命周期短暂的数据,栈是理想的选择。 堆内存则更为灵活,它用于存储那些在运行时动态分配大小的对象。通过new操作符创建的对象和数组都存储在...

    Java堆和栈的区别

    "Java 堆和栈的区别" Java 堆和栈是 Java 中的两种内存管理机制,它们都是 Java 用来在 RAM 中存放数据的地方。但是,它们有很多不同之处。 Java 堆是一个运行时数据区,类的对象从中分配空间。这些对象通过 new、...

    java里的堆和栈

    而栈中的数据大小和生存期必须预先确定。 4. **垃圾回收**:堆需要垃圾回收机制来管理不再使用的对象;栈则不需要,因为随着线程结束,栈自然释放。 #### 六、特殊情况:String类型 String类型在Java中具有特殊的...

    C++中堆和栈的区别

    堆和栈的第一个区别就是申请方式不同:栈是系统自动分配空间的,而堆是程序员根据需要自己申请的空间。栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再...

    Java中堆和栈的区别

    Java中的堆和栈是两种不同的内存区域,它们在程序运行时承担着不同的职责。栈主要用于存储基本类型变量和对象的引用,而堆则用于存储对象实例。了解它们的区别对于优化程序性能至关重要。 栈(Stack): 1. 栈是...

    区别Java中堆与栈区别Java中堆与栈

    Java 中的堆和栈是两个不同的内存区域,分别用于存放不同类型的数据。堆是一个运行时数据区,类的对象从中分配空间,通过new、newarray、anewarray 和 multianewarray 等指令建立,垃圾回收器会自动收走这些不再使用...

    Java 中的堆和栈.doc

    栈内存中的数据大小和生存期在编译时是确定的,这使得它非常适合存储基本类型(如`int`, `double`, `boolean`等)和对象的引用。但是,栈内存不允许动态分配内存,因此其灵活性较低。 堆内存则提供了动态内存分配的...

    关于堆和栈的那些事共9页.pdf.zip

    2. 存储空间:栈的空间有限,通常为几MB;堆空间较大,取决于系统的实际内存。 3. 内存效率:栈内存分配和释放速度快,而堆内存操作相对较慢。 4. 管理方式:栈由系统自动管理,堆则需程序员自己管理,可能导致内存...

    java中堆(heap)和堆栈(stack)有什么区别

    栈中的数据生存空间一般在当前 scopes 内(即由 {…} 括起来的区域)。栈的优势是,存取速度比堆要快,仅次于直接位于 CPU 中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 堆(heap...

    Java中的堆和栈[定义].pdf

    Java 中的堆和栈 Java 中的堆和栈是 Java 语言中两个重要的内存区域,它们扮演着不同的角色,管理着 Java 程序中的内存分配和释放。 堆(Heap) 堆是一个运行时数据区,用于存放由 new 创建的对象和数组。Java ...

    java中的栈(深层了解java虚拟机对对象的内存分布)

    然而,栈的局限性也很明显,即存储在栈中的数据大小和生存周期必须是确定的,这意味着它缺乏堆所提供的灵活性。此外,栈中的数据可以共享,这一点将在后续部分详细讨论。 #### 堆的灵活性与代价 与栈相比,堆的...

    java中堆和栈的区别.pdf

    栈中的内存分配和释放是自动的,当变量的作用域结束时,Java会自动释放掉为该变量所分配的内存空间。栈的优点是存取速度快,缺点是存在栈中的数据大小和生存期必须是确定的,缺乏灵活性。 堆(Heap)是另一块内存...

    java 虚拟机 内存和栈 分析工具 ha456.rar

    2. **栈**:每个线程都有自己的程序计数器和一个独立的栈空间,用于存储方法调用时的局部变量、操作数栈、动态链接等信息。当方法调用结束,对应的栈帧会被弹出栈。 3. **方法区**:存储类的信息,如类名、方法信息...

    静态存储区 堆 栈

    静态存储区、堆、栈在C/C++语言中的应用和区别 静态存储区、堆和栈是C/C++语言中三种不同的内存分配方式,它们之间有着不同的特点和应用场景。 一、静态存储区 静态存储区是在程序编译时就已经分配好的内存空间,...

    Java中堆内存和栈内存详解文.pdf

    栈式分配适用于生命周期短、生存期确定的变量,而堆式分配则适合于需要动态分配和管理内存的对象和数组。Java通过结合这些策略,为开发者提供了自动内存管理的便利,同时也保证了程序的健壮性和安全性。

    java中堆和栈的区别分析

    在Java编程语言中,堆和栈是两种主要的内存区域,它们各自有不同的功能和特点。了解它们的区别对于优化程序性能和避免内存泄漏至关重要。 **堆(Heap)** 堆是Java运行时数据区的一部分,主要用于存储对象实例。当...

Global site tag (gtag.js) - Google Analytics