前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中的堆与栈

java中的堆与栈

作者头像
兰舟千帆
发布2022-07-16 12:54:04
5780
发布2022-07-16 12:54:04
举报
文章被收录于专栏:兰舟千帆的java学习笔记

前言:java中常常听到堆栈,但是好多时候感觉还是一个模糊的认识。因此,一定要认真的看下这方面的东西,查阅资料。并作出总结。

堆与栈

基本认识

首先呢,提出问题:内存中的堆栈和数据结构中的堆栈是否是一样的?

不必过于深刻的去探究的话,也会想到,当然是不同的概念啦!内存中的堆栈是实际存在的存储空间,数据结构中的堆栈只是抽象出来的数据存储结构。 具体的话,首先,内存中所谓的堆栈其实是属于其中的一个划分,叫做动态存储区。动态存储区的话,就分为栈区和堆区。除了动态存储区的话,内存还可以分为代码区和静态数据区。代码区简单的说,肯定是用来存放二进制代码啦!而静态数据区肯定是用来存放一些静态相关的东西,比如静态变量,静态常量这些,以及全局变量这些。堆是可以动态申请的内存空间,c语言通过申请空间的函数就会申请出来堆空间。java中通过new出来的对象就会存在堆中。而栈,在java中,所有的基本数据类型和引用数据类型都会在栈中存储。包装类型的数据一般会存放在堆中。栈中数据的生存空间一般在当前scopes内(就是由{…}括起来的区域).另外,java中会自动管理堆栈。 在数据结构中,堆是一颗完全二叉树结构。 栈是一种连续存储的数据结构与,其特点就是先进后出的数据存取特点。

其实比较重要的一点认识就是,在java中,堆是用来存放对象的,栈主要是用来执行程序的。栈的存取数据是比较快的,比堆的存取速度要快一些。Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在栈中分 配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。

标签: Java

可能,如果没有对硬件有一个轮廓认识的话,其实一切都似乎是抽象出来的。

要说明的是,堆栈位于RAM中中。当然。栈的存取数据的速度还是仅次于cpu中的寄存器的。 下面是摘录的一些详细的说明 : 1,寄存器,在是cpu中的一块空间,速度比较快…Java不能直接对寄存器操作 2,堆栈位于RAM中,速度仅次于寄存器…将基本数据类型和对象的引用,方法的形式参数存储在栈中 3,堆,也位于RAM中,当你new 一个对象的时候,他会自动在堆里进行分配…将字符串,数组,集合,对象,this等大数据存储在堆中 4.方法区,位于RAM中…存储静态变量,string常量,class 5,常数储存,直接放到代码内部,这样做是安全的,还有就是,他不会被改变. 6,非ram储存 如果数据完全存在于程序之外,那么可以不受程序的控制,在程序没有运行里也可以存在,有两个例子,“流对象”,"持久化对象"

稍微理解一下堆栈,可能会解决一些编程中的疑惑。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 堆与栈
  • 基本认识
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档