java中数据存储问题--堆、堆栈、寄存器

(1)、寄存器(Registers):
这是速度最快的存储场所,因为寄存器位于处理器内部,这一点和其他的存储媒介都不一样。不过寄存器个数是有限的。在内存中的寄存器区域是由编译器根据需要来分配的。我们程序开发人员不能够通过代码来控制这个寄存器的分配。所以说,这第一个存储区域寄存器,我们只能够看看,而不能够对其产生任何的影响。,也没办法在程序里头感觉到寄存器的任何存在迹象。
(2)、Stack(堆栈):
位于一般的RAM中。处理器经由指针提供直接支持。当程序配置一块新的内存时,stack指针便往后移;释放内存时,指针则往前移。这种方式不仅很快,效率也高,速度仅次于寄存器。[color=red]用于存放对象引用以及基本的数据类型对象[/color],不能用于存储Java对象本身。
(3)、Heap(堆):
一种通用的内存空间,[color=red]用来存放Java对象[/color]。Heap不同于stack之处在于,编译器不需知道究竟得从heap中配置多少空间,也不需知道从heap上配置的空间究竟需要存在多久。因此,自heap配置存储空间可以获得高度的弹性。每当你需要产生对象,只需在程序中使用new,那么执行的时候,便会自heap配置空间。当然,你得为这样的弹性付出代价:从heap配置空间,比从stack配置,所耗费的时间多了不少。
(4)静态存储区域与常量存储区域:
静态存储区域就是指在固定的位置存放应用程序运行时一直存在的数据,Java在内存中专门划分了一个静态存储区域来管理一些特殊的数据变量如静态的数据变量,需要明确的一点就是,Java对象是不保存在这个地方的,而只是把对象中的一些特殊元素放置这。

在Java对象中还有一类特殊的元素,我们叫做常量。由于常量的值是稳定不变的,如圆周率。为此把他们放在代码的内部是可行的。不过有些时候,在进行一些嵌入式系统开发的时候,我们往往不这么做。而是会把常量元素跟代码分开来保存。如我们会根据情况把常量的值存放在一些只读存储器中。这主要是为了一些特殊的功能考虑的。如出于版权控制的需要。如在打印机上为了保护原装耗材的版权,往往把常量跟代码分开存放
(5)非RAM存储:
有时候,有些程序运行所需要的数据我们还会放置在其他地方。如在一些系统中需要用到流对象,这个对象的数据并没有保存在上面所谈到的任何一个存储区域,这个对象直接被转为为字节流,发送到其他的主机上去了。另外有一种叫做持久化的对象,其是被存储在硬盘中的

速度:
寄存器 > 堆栈 > 堆 > 其他
华为的C语言编程规范.pdf 华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。 立即下载

相关推荐

[Unity Demo]从零开始制作空洞骑士Hollow Knight第四集:制作更多的敌人

大家好久不见,终于放完中秋假期可以回自己家里打代码了,上一期我介绍了为什么和如何导入2D toolkit以及制作一个完整的敌人(就是那只蚊子包括了精灵,动画,状态机行为以及脚本)现在不妨趁热打铁制作更多的敌人。

dangoxiba的博客 1973

Java内存区和变量分布(重要!)

1.JVM(java虚拟机)主要包括三块内存空间,分别是栈内存,堆内存,方法区内存栈内存局部变量堆内存实例变量方法区内存代码片段静态变量▲需要注意的是:jdk8以后的方法区被元空间和一部分到堆里的功能代替了,只是方便理解所以还叫方法区栈:方法调用和返回、表达式求值、括号匹配等。堆:对象的创建、动态数据结构、动态数组和集合、java虚拟机的数据管理等。方法区:储存类的信息、常量池、静态变量、编译后的二进制代码。本地方法栈:调用本地方法、连接Java和本地代码库、支持操作系统和硬件相关功能。

m0_74000825的博客 900

004.PADS VX2.4常用快捷键及无模命令

PADS系列文章

qq_36492361的博客 4964

用ram实现寄存器堆_Java面试相关(二)--深入理解堆和栈

作者:androidjp链接:https://www.jianshu.com/p/bfa5337ef59e引言:看了网上一些作品,没有特别清晰的一个结构,所以,这里本人整理一下Java的堆栈相关知识。Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存。至于“方法区”(静态存储区),可以理解为:主要存放静态数据、全局 static 数据和常量。这块内存在程序编译时就已经分配好...

weixin_39603492的博客 246

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9925

slam_toolbox 简介和使用

专为移动机器人在未知环境中实时构建地图和定位设计。它适用于2D和3D环境,支持多种机器人平台和传感器配置。

weixin_74808846的博客 3305

java的静态常量

静态常量表达式:final static int 变量名 = "abc"; 静态的变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 被final修饰的变量不能再改变变量的值。例如: //错误代码,test1的值不能再更改 public final String test1 = "aaa"; test1 = "bbb"; 使用final关键字修饰一个变量时,是指引用变.

又一个优快云博客 4804

Nacos启动报错No DataSource set?5分钟搞定standalone模式配置

本文针对Nacos启动时常见的“No DataSource set”报错,深入解析了其根源在于默认集群模式与外部数据库依赖。提供了两种快速解决方案:通过命令行参数“-m standalone”启动,或直接修改启动脚本配置文件,从而在5分钟内以单机模式成功启动Nacos,无需配置MySQL数据库。

weixin_29234509的博客 465

一文掌握java对内存空间的划分

一文掌握java对内存空间的划分

qq_41974343的博客 1758

HTOL集成电路老化测试学习总结-20250510

电子元器件的可靠性在产品开发中至关重要,尤其是在微电子技术迅速发展的今天。电子元器件的失效率通常遵循“浴盆曲线”,分为早期失效期、可使用期和老化期。为了评估芯片的可靠性,常采用高温操作寿命测试(HTOL),通过高温和高压加速芯片老化,以筛选出早期失效的芯片并评估其长期可靠性。HTOL测试中,芯片在高温下运行并监控其性能变化,通过阿伦尼乌斯公式计算加速因子,预测芯片的失效率和寿命。此外,Burn-in测试用于加速芯片老化,提前发现并剔除不合格产品,而早期失效率测试(ELFR)则用于评估产品初期使用阶段的可靠性

歌颂苦难的行为是无耻的; 2101

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 595

java有寄存器变量么_寄存器变量

C语言中的变量按存储区域可以分为三种:堆栈中的自动变量,普通内存中得静态变量,硬件寄存器变量。由于寄存器变量直接存放在CPU中,而不在内存中,所以访问速度极快。一般应用于需要大量次数访问的变量。寄存器变量只能存放int ,char和指针类型的数据,而且寄存器变量不能过多的使用,否则反而会降低运算速度。但是我们将数据类型定义为registerint类型难道真的能提高运算速度吗?int main(in...

weixin_35851482的博客 460

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java 编程思想的学习笔记 - 第二章 一切都是对象

由于这几天工作比较忙,没顾得上学习,接着第二章学习 一切皆是对象 用引用操纵对象 Java 语言的一个特性:字符串可以用带引号的文本初始化。  String s = "asdf";  创建一个引用的同时便进行初始化。 必须由你创建所有对象 String s = new String("asdf");  存储到什么地方 (重点!) 程序运行的时候有六个不同的地方可

尘缘的博客 268

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java中数据存储位置(堆栈、堆、栈的区别)

一、Java有六个地方可以存储数据 寄存器(register):这是最快的存储区,因为它位于处理器内部,相当于操作系统中访问cache一样。 堆栈(stack):其实就是栈只是一个抽象的词语而已。创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,就是说像int a=1,double b=2等八种基本数据类型为了追求速度就是存放于栈当中。不过有...

qq_38261445的博客 3073

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java存储机制(栈、堆、方法区详解)

一、java的六种存储地址及解释 1) 寄存器(register):这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。     2) 堆栈(stack):位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若

王小的博客 4万+

JAVA中的数据存储(堆及堆栈)

在JAVA中,有六个不同的地方可以存储数据:  1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。  2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内

Thinking In Java 456

java堆、栈、堆栈,常量池的区别,史上最全总结

先说一下栈和堆栈,我们听老一辈的程序员一般都会说堆栈,其实栈就是堆栈的意思,连着叫只是由于历史的原因。博主04年学数据结构的时候,书上都是说的堆栈,FILO(先进后出),也经常拿堆栈和队列,FIFO(先进先出)这两种数据结构拿来作比较。 系统中的堆、栈 和 数据结构堆、栈 系统中的堆、栈和数据结构堆、栈不是一个概念。可以说系统中的堆、栈是真实的内存物理区,数据结构中的堆、栈是抽象的数据存储结构...

夏壹分享 6996

java内存中的堆栈、堆、静态区、常量池

转自:http://www.cnblogs.com/protected/p/6419217.html程序运行时,有六个地方都可以保存数据:  1、 寄存器:这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。  2、 堆栈:存放基本类型的数据和...

hust_yfang的博客 2558

java中的数据存储结构

java中的数据存储结构在java中数据的存储结构可以分为六种: 寄存器存储区 堆栈区 堆区 静态存储区 常量存储区 非RAM数据存储区 寄存器存储区由于位于处理器cpu的内部,所以其是最快的存储区,然而寄存器的空间极其珍贵有限,所以程序开发者无法直接控制寄存器空间的分配,它的分配工作是由编译器自行分配的.特点:最快的存储区, 由编译器根据需求进行分配,开发者在程序中无法进行控制.堆栈存储区位于通用

stormCoder的博客 5695

java堆、栈、堆栈,常量池的区别总结

java堆、栈、堆栈,常量池的区别1. 前言2. 系统中的堆、栈 和 数据结构堆、栈2.1 数据结构堆、栈2.2 系统方面的堆和栈3. Java里的堆和栈(系统方面的堆和栈)3.1 常见概念3.2 总结4. 申请响应、申请限制4.1 申请响应4.2 申请限制5. 数据存储 转自知乎,原文链接。我对原回答进行了排版整理。 1. 前言 先说一下栈和堆栈,我们听老一辈的程序员一般都会说堆栈,其实栈就是堆...

TingtingYang 1851

JAVA中数据存储

在JAVA中,有六个不同的地方可以存储数据 1. 寄存器(register)。 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。     ------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 堆栈(stack)。位于通用RAM...

fu-jw的博客 5158

JAVA 寄存器、堆栈、堆、常量存储、非RAM存储 (《java编程思想》笔记)

寄存器 这是最快的存储区,因为它位于不同其他存储区的地方---处理器存储部。但寄存器的数量及其有限,所有寄存器根据需求进行分配。你不能直接控制,也不能再程序中感觉到寄存器存在的任何迹象(另一方面,C和C++允许你向编译器建议寄存器的分配方式) 堆栈 位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器哪里获得直接支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。...

qq_43059674的博客 655

数据存储 堆栈和堆 thinking in java

V4 Page22   程序运行时,对象是怎样进行放置安排的?特别是内存的分配是怎么样的?对这些方面的了解会对你有很大的帮助。 有五个不同的地方可以存储数据。 1.寄存器     位于处理器内部。数量有限,根据需求进行分配。 2.堆栈     位于

lengyue的专栏 892

java 保存数据_java数据存储

记录一下java中的数据存储:这是我参考的文章:在《thinking in java》这本书的第二章也有提到,因为涉及到jvm(我还没看),这个等我之后再补充。一、六种不同的数据存储1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象...

weixin_42301008的博客 2497
上一篇: No.9 丢失异常
下一篇: jvm中堆和栈
afunti
博客等级 码龄17年 25粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值