`
zengbin163
  • 浏览: 14153 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

堆和栈小结

 
阅读更多
转载 作者不详

(1)JAVA中基本数据类型直接存储在栈中,而复合的数据类型采用引用模型,其引用存储在栈中,而对象存储在堆中。
(2)Java把内存划分成两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
(3)static存储在方法区中是jvm规范中的术语。
而方法区是一定在jvm所在的进程所属的堆A中。
而jvm在堆A中划出一块内存用于存放类信息等数据信息,这块内存
就叫方法区,某个jvm实现 � 可以用堆来作为存放这些数据信息的数据结构,
这时方法区就以堆的形式而存在了。
(4)目前的jvm中有两种堆(不排除以后合并为一种堆),
其中一种堆是用于存放由new创建的对象和数组,
另一种堆是用于存放装载进来的类信息,static变量即存储在这个类信息中。



Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间。
(1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。
(2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。
(3)stack中的对象或变量只要定义好就可使用了,应用程序结束时会自动释放。
(4)而要使用heap中申请的变量或对象只能定义变量指针,并要求在运行过程中通过new来动态分配内存空间,而且必须显示地free你申请过的内存,不过Java的垃圾回收机解决了这个问题,它会帮你释放这部分内存。
(5)stack中变量的大小和个数会影响exe的文件大小,但速度快。堆中的变量大小与exe大小关系不大,但分配和释放需要耗费的时间远大于stack中分配内存所需的时间。
(6)stack�和�heep��都是内存的一部分
stack�空间小,速度比较快,�用来放对象的引用
heep�大,一般所有创建的对象都放在这里
(7)栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.
在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).
堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中.
在java中,所有使用new�xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象.所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用.
分享到:
评论

相关推荐

    堆和栈的区别.txt

    标题:堆和栈的区别 描述:本文旨在深入探讨C语言中的堆和栈的概念,以及它们在内存管理中的作用,帮助读者更深刻地理解C语言的内部机制。 知识点: 1. **堆(Heap)与栈(Stack)的概念** - **栈(Stack)**:...

    C++堆和栈的区别与联系讲解

    小结,堆和栈的区别可以用如下的比喻来看出:使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由...

    堆跟栈的分析

    #### 小结 1. **栈分配的优点**:速度快、自动管理;缺点是空间有限且不能动态扩展。 2. **堆分配的优点**:灵活、空间大;缺点是需要程序员手动管理,容易出现内存泄漏等问题。 通过对比分析,我们可以更加深刻地...

    C++内存管理小结(内存控制)

    ### C++内存管理小结(内存控制) #### 内存管理的重要性 内存管理在C++编程中占据着核心地位,既是提升程序性能的关键,也是新手程序员的“噩梦”。掌握良好的内存管理技巧,不仅能避免内存泄漏,提高代码的稳定...

    Java 垃圾回收小结(一)

    Java中的内存分为堆(Heap)和栈(Stack)两部分,垃圾回收主要关注堆内存。当一个对象不再被任何引用指向时,它被视为可回收的垃圾。GC通过一系列算法来检测和回收这些对象,从而释放内存资源。 2. 垃圾回收器...

    java集合小结

    ### Java集合小结 #### 一、集合的概念与重要性 集合是Java编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,...

    数据结构排序算法小结

    堆排序适合大数据量的场景,因为它不需要递归或二维数组,避免了大数据量时可能出现的栈溢出。 4. **Shell排序**:Shell排序是插入排序的一种优化版本,通过间隔序列(例如,希尔序列)来减少元素的交换次数。它在...

    c措辞法度模范设计小结优质文档(与“程序设计”有关文档共96张).pptx

    9. **内存管理**:了解堆和栈的区别,理解局部变量和全局变量的生命周期,以及如何避免内存泄漏,对于编写高效且无bug的程序至关重要。 10. **标准库和编程规范**:遵循一定的编程风格,如K&R风格或Allman风格,...

    Delphi算法与数据结构 源码(上)

    1.4小结 第2章数组 2.1数组 2.2Delphi中的数组类型 2.3TList类和指针数组 2.4磁盘数组 2.5小结 第3章链表、栈和队列 3.1单链表 3.2双向链表 3.3链表的优缺点 3.4栈 3.5队列 3.6小结 .第4章查找 4.1比较...

    Delphi算法与数据结构 源码(下)

    1.4小结 第2章数组 2.1数组 2.2Delphi中的数组类型 2.3TList类和指针数组 2.4磁盘数组 2.5小结 第3章链表、栈和队列 3.1单链表 3.2双向链表 3.3链表的优缺点 3.4栈 3.5队列 3.6小结 .第4章查找 4.1比较...

    华为OD机考小结+算法编程试题一遍过

    【华为OD机考小结及算法编程试题解析】 华为OD机考是华为公司针对软件开发和测试岗位的招聘环节,其重要性不言而喻,因为它直接影响候选人的定级和薪资。机考主要包含三道题目,两道简单,一道中等,涵盖50%的软件...

    Java数据结构和算法(第二版)

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 ...

    C++面试题小结

    - 栈内存:局部变量在此分配,随着函数调用和结束自动释放。 - 堆内存:动态分配,使用malloc/new,需要手动使用free/delete释放。 14. **虚拟存储器**:虚拟内存将物理内存和硬盘上的空间结合起来,为程序提供比...

    Android内存管理小结

    - 较小的体积和更低的资源消耗使得它非常适合移动设备。 - 支持同时运行多个虚拟机实例,这使得每个Android应用都能拥有独立的虚拟机环境。 #### 二、Dalvik虚拟机架构特点 - **基于寄存器架构**:与传统的JVM...

    IDA.Pro代码破解揭秘part1

    5.5 堆和栈的访问和修改 78 5.6 其他调试器 80 5.6.1 Windbg 80 5.6.2 Ollydbg 80 5.6.3 immdbg 81 5.6.4 PaiMei/PyDbg 81 5.6.5 GDB 81 5.7 小结 82 第6章 反逆向技术 83 6.1 导言 84 6.2 调试 84 6.3 ...

    Java数据结构和算法中文第二版

    全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、递归、进阶排序、二叉树、红黑树、哈希表及图形等知识。附录中则提供了运行专题Applet和例程、相关书籍和问题解答。本书提供了学完一门编程...

    Java内存分配、管理小结.doc

    - 每次方法调用都会创建一个新的栈帧,其中包含局部变量表、操作数栈和动态链接等信息。 - 栈帧在方法调用开始时创建,方法结束时销毁,遵循“先进后出”(LIFO)原则。 3. **堆内存(Heap Memory)**: - 堆是...

    编译原理(第二版中文)

     1.9 小结  习题一 第2章 形式语言概论  2.1 语言成分  2.2 产生式文法和语言  2.3 文法的分类  2.4 语言和语法  2.5 文法和语言的一些特性  2.6 分析方法简介  2.7 小结  习题二 第3章有穷...

    Java数据结构和算法中文第二版(2)

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 ...

    Java数据结构和算法中文第二版(1)

    小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 ...

Global site tag (gtag.js) - Google Analytics