`

Stack(栈)与Heap(堆)的异同

阅读更多
Java把内存划分成两种:一种是栈内存,一种是堆内存。

在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。

当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

堆内存用来存放由new创建的对象和数组。

在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。

引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象

----------------------------------------------------------------------
                  Heap(堆)             Stack(栈)
JVM中的功能:       内存数据区               内存指令区
存储数据:          对象实例(1)   基本数据类型, 指令代码,常量,对象的引用地址(2)

1. 保存对象实例,实际上是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在stack中)。
   对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例。

2. 基本数据类型包括byte、int、char、long、float、double、boolean和short。
    函数方法属于指令.
分享到:
评论

相关推荐

    java私塾面试题----JAVA基础3

    Heap和Stack是Java内存管理中的两个关键概念,它们分别对应着堆内存和栈内存。 - **栈(Stack)**:是一种线性数据结构,遵循先进后出(LIFO)原则。栈主要用于存放局部变量、函数调用参数等,其生命周期与方法调用...

    进销存系统文档作业例子

    <>boolean Boolean ...18、heap和stack有什么区别。 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 很详细的进销存系统文档

    java面试题的几个区别

    理解`String`与`StringBuffer`、运行时异常与一般异常、`Collection`与`Collections`、`&`与`&&`、`HashMap`与`Hashtable`、`ArrayList`与`...与`Exception`、`Heap`与`Stack`的区别对于深入掌握Java编程至关重要...

    10道腾讯的Java面试题答案.zip

    - 解答:Java内存分为堆(Heap)、栈(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。堆用于存储对象实例,栈用于存储基本类型和引用,方法区存储...

    Android面试常见问题

    Android系统使用Dalvik或ART虚拟机管理内存,分为堆内存(Heap)和栈内存(Stack)。堆内存主要用于对象实例的分配,而栈内存则用于存放方法调用时的局部变量。理解内存管理机制有助于优化应用程序性能。 2. 局部...

    java笔试题

    9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少? 11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? ...

    关于一些java的面试题

    #### heap与stack的区别 * 堆(Heap)是用于动态分配内存的区域,存储着对象和数组。 * 栈(Stack)是用于存储局部变量和函数调用信息的区域,遵循后进先出(LIFO)原则。 #### GC的作用 * 垃圾收集(Garbage ...

    2023年C#面试题中常见比较.doc

    在C#中,堆(heap)和栈(stack)是两种不同的内存管理机制。堆是用于存储引用类型的内存区域,栈是用于存储值类型的内存区域。 谈谈 final, finally, finalize 的区别 final, finally, finalize 是三种不同的语言...

    java面试宝典

    11、heap 和stack 有什么区别? 9 12、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 9 13、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 9 14、编程题: 用最有效率的方法算...

    java技术支持面试题

    heap 是指内存中的堆栈,而 stack 是指方法调用栈。 16. GC 是什么?为什么要有 GC? GC 是指垃圾回收,垃圾回收是指自动释放内存的机制,垃圾回收机制是为了避免内存泄露。 17. short s1 = 1; s1 = s1 + 1;有...

    2022最新Java面试题及答案总结

    JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack),每个部分都有特定的用途。 17. **多线程与并发**: 多线程是指程序中可以...

    各大公司应聘面试题汇总

    - **栈(Stack)**: 动态分配的内存段,由编译器自动管理,用于存放函数的参数值、局部变量等。特点是先进后出(LIFO)。栈空间的分配与回收速度快,但容量较小。 - **堆(Heap)**: 由程序员手动分配释放,若没有...

    一些Java面试题库

    7. **heap与stack的区别** 栈主要存储局部变量、方法参数和返回地址,遵循LIFO(后进先出)原则。堆主要存放对象实例,内存分配更加灵活,支持动态大小。 8. **final, finally, finalize的区别** - final:修饰类...

    java面试题

    #### heap和stack的区别 堆和栈是Java中两种重要的内存区域。栈内存用于存储局部变量和方法调用的信息,遵循先进后出的原则;而堆内存用于存储对象实例,由垃圾回收器管理。两者的区别在于生命周期、分配方式及管理...

    c++基础概念.doc

    "C++ 基础概念" C++ 是一种高效、灵活、可移植的编程语言,广泛应用于操作系统、游戏、...堆(Heap)和栈(Stack)是两种不同的内存区域。堆用于存储动态申请的内存空间。栈用于存储函数调用时的局部变量和函数参数。

    史上最全java面试题总结.pdf

    - **JVM内存管理**:包括堆内存(Heap)、栈内存(Stack)、方法区(Method Area)等区域,理解它们的工作原理有助于解决内存溢出等问题。 - **GC回收机制**:Java的垃圾收集器负责回收不再使用的对象,有多种算法...

    Java面试题集大全

    Stack与Heap的区别 - **栈**:用于存储局部变量、函数调用等,由编译器自动分配释放。 - **堆**:用于动态分配内存,由程序员控制分配和释放。 ### 8. 长整型数据类型的应用 - **实现方案**:可以通过创建一个...

    java经典面试题大全

    heap与stack的区别 - **栈(Stack)**:用于存储局部变量等,遵循先进后出的原则。 - **堆(Heap)**:用于动态分配内存,存储对象实例。 ### 9. 超大整数的数据结构与算法设计 对于超大整数的处理,可以使用一...

    华为java面试题

    - 栈(stack)用于存放方法调用时所需的局部变量和方法参数等。 57. **Static Nested Class和Inner Class的不同** - 静态内部类(Static Nested Class)不依赖于外部类的实例,可以直接使用。 - 普通内部类...

Global site tag (gtag.js) - Google Analytics