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存储:
有时候,有些程序运行所需要的数据我们还会放置在其他地方。如在一些系统中需要用到流对象,这个对象的数据并没有保存在上面所谈到的任何一个存储区域,这个对象直接被转为为字节流,发送到其他的主机上去了。另外有一种叫做持久化的对象,其是被存储在硬盘中的

速度:
寄存器 > 堆栈 > 堆 > 其他
TPAMI审稿人关注什么 写在开头:被tpami接收大概是每个cs er最开心的事情吧!今天阅读TPAMI的文章时,发现有扩刊的文章,也有不是扩刊的文章,那么这两类文章哪个更容易被接收呢? 阅读详情

相关推荐

STM32G0实战:手把手教你用国产GD25Q16 Flash存储传感器数据(附完整驱动)

本文详细介绍了如何使用国产GD25Q16 Flash芯片与STM32G0系列MCU实现传感器数据存储的完整方案。从SPI接口配置、驱动层实现到存储系统架构设计,提供了实战代码和优化策略,帮助开发者快速构建高性价比的物联网数据存储系统。

weixin_30733003的博客 106

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

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

m0_74000825的博客 900

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

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

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

weixin_39603492的博客 246

产品经理-面试题目--持续更新

答:面试官,你好,我叫XXX,来自于XXXX,我系统的学习过软件开发,也主动的积累了不少产品方面的实战经验,在学习期间,我自己独立的完成了2个深度项目,一个是仿抖音的短视频APP全流程设计,另外一个是电商后台系统的模块,通过这些项目,我不仅熟练使用Axure等工具做出高保真原型图和清晰的产品框架,也形成了数据驱动和用户优先的思维习惯,另外,我也注重拓展自己的能力边界,拿到了CAIE人工智能证书,我希望能把AI能力融入到产品场景,提升体验和效率,我非常喜欢产品工作带来的创造性和逻辑性,希望有机会加入贵公司。

m0_63966958的博客 956

《机器人学一(Robotics(1))》_台大林沛群 第 3 周 【机械手臂 顺运动学】Quiz 3

的方向,旋转方向与四指弯曲方向相反,为负, α为 -90。的方向,旋转方向与四指弯曲方向相反,为负, α为 -90。bug 的图 要求解的 i 位置有误 两套 题目?B. 第2个 坐标系 的原点位置 不便于 计算;上面的正确,后两题 有误, 不知道问题在哪里。标准部分, 前面的更常用,这种仅作为 了解。还是计算过程中保留两位有效数字 不符合。2、确定 旋转角 α 正负的右手定则。1、确定坐标系方向的右手定则。可相交,距离为 0。A: 右手拇指指向。小数点后两位,不符合。

weixin_46034116的博客 1242

java的静态常量

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

又一个优快云博客 4804

SAP FICO CK40N批量发布标准价:常见报错排查与实战解决指南

本文详细解析了SAP FICO模块中CK40N批量发布标准价的常见报错及解决方案。从物料选择、成本核算到最终发布的全流程,提供了针对'已有标准成本估算记号'等典型报错的实战处理技巧,并分享了预防性维护与批量处理的高效方法,帮助财务人员提升工作效率。

weixin_29234509的博客 304

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

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

qq_41974343的博客 1758

别再只用GPS了!用Android手机传感器实现室内步行轨迹记录(避坑指南)

本文详细介绍了如何利用Android手机传感器(如加速度计、陀螺仪和磁力计)实现室内步行轨迹记录,克服GPS在室内的局限性。通过传感器数据采集、步态检测、航向估计和轨迹绘制等步骤,结合避坑指南和优化技巧,帮助开发者高效构建室内定位应用。

weixin_26821003的博客 274

Python学习第32天:Web前端入门

本文介绍了Web前端开发三大核心技术:HTML、CSS和JavaScript。首先概述了HTML的发展历程和HTML5新特性,详细讲解了常用HTML标签如文本、列表、链接、图像、表格、表单等。其次介绍了CSS的基础语法、选择器、颜色字体设置、盒子模型和布局定位方法。最后简要提及JavaScript为网页添加交互功能的作用。文章为Python开发者提供了前端技术的基础知识,帮助理解网页的结构、样式和行为实现原理。

tigerhhzz的博客 1910

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

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

weixin_35851482的博客 460

为JETSON TX2开发板部署YoloV5

参考资料一:nvidia为JETSON Tx2编译的pytorch 参考资料二:Jetson软件包下载 参考资料三:Tx2安装工具的使用 参考资料四: Jetson烧录工具 参考资料五: B站下载的行人视频 一、升级TX2系统版本到最新版(JetPack4.6) 我拿到的板子的版本太低了,在工作的过程中会有很多问题,因此要先升级到最新版 下载参考资料四中的烧录工具,在Ubuntu18.04中安装,只能,必须,一定是Ubuntu18.04 安装完成后使用非root用户启动SDK Manger,登录Nvi.

贱贱的剑 5887

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

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

尘缘的博客 268

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

qq_38261445的博客 3073

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

王小的博客 4万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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、付费专栏及课程。

余额充值