堆栈与堆的区别

news/2024/6/29 11:38:32 标签: 存储, java, 数据结构, 编译器, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">ce:pre">ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">ce:pre">堆栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同࿰c;class="tags" href="/tags/JAVA.html" title=java>java自动管理栈和堆࿰c;程序员

ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">ce:pre">ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">不能直接的设置栈或者堆。从堆和栈的功能来通俗的比较࿰c;堆主要用于存放对象࿰c;栈主要是用来执行程序的。这

ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">ce:pre">ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">种不同是由于堆栈和堆的特性决定的࿰c;以下是它们在概念上的区别:

ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">ce:pre">ca,Tahoma,Arial,sans-serif; white-space:pre; text-align:left">

ce:pre">ce:pre">堆栈位于通用RAM(随机访问class="tags" href="/tags/CunChu.html" title=存储>存储器)中࿰c;但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动࿰c;则分配新的内存;若向上移动࿰c;则释放那些缓存。这是一种快速有效的分配class="tags" href="/tags/CunChu.html" title=存储>存储方式࿰c;仅次于寄存器。创建程序时࿰c;class="tags" href="/tags/JAVA.html" title=java>java系统必须知道class="tags" href="/tags/CunChu.html" title=存储>存储在堆栈内的所有项的确切生命周期࿰c;以便上下移动堆栈指针。ca,Tahoma,Arial,sans-serif; font-size:18px; line-height:25px; white-space:pre"> 这一约束限制了程序的灵活性࿰c;所以虽然某些class="tags" href="/tags/JAVA.html" title=java>java数据class="tags" href="/tags/CunChu.html" title=存储>存储于堆栈中---特别是对象引用࿰c;但是class="tags" href="/tags/JAVA.html" title=java>java对象并不class="tags" href="/tags/CunChu.html" title=存储>存储于其中。


ce:pre">ce:pre">一种通用的内存池(也位于RAM区)࿰c;用于存放所有的class="tags" href="/tags/JAVA.html" title=java>java对象。堆不同于堆栈的好处是:class="tags" href="/tags/BianYiQi.html" title=编译器>编译器不需要知道class="tags" href="/tags/CunChu.html" title=存储>存储的数据在堆里存活多长时间。因此࿰c;在堆里分配class="tags" href="/tags/CunChu.html" title=存储>存储有很大的灵活性。当需要一个对象时࿰c;只需要用new写一行简单的代码࿰c;当执行这行代码时࿰c;会自动在堆里进行class="tags" href="/tags/CunChu.html" title=存储>存储分配。当然࿰c;为这种灵活性必须要付出相应代价:用堆进行class="tags" href="/tags/CunChu.html" title=存储>存储分配和清理可能比用堆栈进行class="tags" href="/tags/CunChu.html" title=存储>存储分配需要更多的时间(如果确实可以在class="tags" href="/tags/JAVA.html" title=java>java中像在C++中一样在栈中创建对象)。


ce:pre">ce:pre">此外࿰c;ca,Tahoma,Arial,sans-serif; line-height:25px; text-align:left">栈(stack):是一个先进后出的class="tags" href="/tags/ShuJuJieGou.html" title=数据结构>数据结构,通常用于保存方法(函数)中的参数,局部变量。ca,Tahoma,Arial,sans-serif; line-height:25px; text-align:left">在class="tags" href="/tags/JAVA.html" title=java>java中,所有基本类型和引用类型都在栈中class="tags" href="/tags/CunChu.html" title=存储>存储。栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域)。


ca,Tahoma,Arial,sans-serif; text-align:left" /> ca,Tahoma,Arial,sans-serif; line-height:25px; text-align:left">ce:pre">ce:pre">堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中。ca,Tahoma,Arial,sans-serif; line-height:25px; text-align:left">在class="tags" href="/tags/JAVA.html" title=java>java中,所有使用new xxx()构造出来的对象都在堆中class="tags" href="/tags/CunChu.html" title=存储>存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象。所以,理论上说class="tags" href="/tags/JAVA.html" title=java>java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用。

cle>

http://www.niftyadmin.cn/n/1759645.html

相关文章

概率生成函数学习笔记

前言 概率生成函数好像是个很厉害的东西啊……如果有掷骰(tou)子的问题似乎可以直接套板子的说…… 本篇文章全部都是抄《浅谈生成函数在掷骰子问题上的应用》(杨懋龙)这篇论文的 定义 我们定义一个形式幂级数\(A(x)\)&#xff0c…

SpringBoot - 缓存

1. JSR107缓存规范 为了统一缓存的开发规范,提高系统的扩展性,j2ee提供了 JSR107缓存规范,其中定义了5个核心接口分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry CachingProvider缓存提供者 CachingProvider定义了创建、配…

Redis - 事务

1. 概述 redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时,一次性 按照添加顺序依次执行,中间不会被打断或者干扰。 2. 基本操作 //开启事务 设定事务的开启位置&#xff0c…

docker安装Tomcat软件,部署项目

1 搜索tomcat镜像 $ sudo docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open so…

Redis - 删除策略

1. 概述 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态 XX :具有时效性的数据 -1 :永久有效的数据 -2 :已经过期的数据 或 被删除的数据 或 未定义的数据过期的数据真的…

中软面试题(二)

要求:有一个不定长度的String,其中前面是字母,后边是数字,例如:"abcd123.456", 要求写一个方法得到其中的数字以String的形式返回,数字保留小数点后两位,不四舍五入,截去多余小数。例如&#xf…

LeetCode 427 Construct Quad Tree 解题报告

题目要求 We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or false. The root node represents the whole grid. For each node, it will be subdivided into four children nodes until the values in the region it rep…

Spring注解开发 - Aop原理

1. AOP AOP的使用 2. 原理 对于这类的源码分析,主要就是看往容器中注入了什么组件和组件什么时候工作 EnableAspectJAutoProxy注解 Aop要起作用关键的一点在于配置EnableAspectJAutoProxy注解,所有先来分析这个注解 点进这个注解,可以看…