当前位置: 首页 > 编程日记 > 正文

Java中数据存储方式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
2. 堆栈(stack)。位于通用 RAM(random-access memory,随机访问存储器)中,但通过它的“堆栈指针”可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,Java 编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些 Java 数据存储于堆栈中——特别是对象引用,但是 Java 对象并不存储于其中。
3. (heap)。一种通用性的内存池(也存在于 RAM 区),用于存放所有的 Java 对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象时,只需用 new 写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代价。用堆进行存储分配比用堆栈进行存储存储需要更多的时间(如果确实可以在 Java 中像在 C++中一样用栈保存对象)。
4. 静态存储(static storage)。这里的“静态”是指“在固定的位置”(尽管也在 RAM 里)。静态存储里存放程序运行时一直存在的数据。你可用关键字 Static 来标识一个对象的特定元素是静态的,但 Java 对象本身从来不会存放在静态存储空间里。
5. 常量存储(constant storage)。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其它部分隔离开,所以在这种情况下,可以选择将其存放在 ROM(read-only memory,只读存储器)中。

6. 非 RAM 存储(non-RAM storage)。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是“流对象(streamed object)”和“持久化对(persistent object)”。在“流对象”中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于:把对象转化成可以存放在其它媒介上的事物,在需要时,可恢复成常规的、基于 RAM 的对象

1、Register(寄存器)
存在与CPU中,存取速度最快,但数量有限


2、Stack(栈、堆栈)
存在与内存中,存取的速度和效率仅次于Register,在程序加载的时候编译器必须准确知道所需的所有空间大小,通过指针来操作


3、Heap(堆中)
存在与内存中,存取方式灵活,无需编译器关心,速度比不上Stack


4、Static (静态类型)
整个程序都可以访问,对象的属性可以是静态的,但JAVA对象不会是静态的.


5、Constant(常量)
存在于程序代码中,不能改变


6、非易失性数据
a、流类型数据
b 、持久性数据

就速度来说,有如下关系:
寄存器 < 堆栈 < 堆 < 其他

『上面这段话摘取之《Thinking in Java》』

在这里,主要要说下堆与堆栈的关系:

堆:堆是heap,是所谓的动态内存,其中的内存在不需要时可以回收,以分配给新的内存请求,其内存中的数据是无序的,即先分配的和随后分配的内存并没有 什么必然的位置关系,释放时也可以没有先后顺序。一般由使用者自由分配,malloc分配的就是堆,需要手动释放。

堆栈:就是STACK。实际上是只有一个出入口的队列,即后进先出(First In Last Out),先分配的内存必定后释放。一般由,由系统自动分配,存放存放函数的参数值,局部变量等,自动清除。

还有,堆是全局的,堆栈是每个函数进入的时候分一小块,函数返回的时候就释放了,静态和全局变量,new 得到的变量,都放在堆中,局部变量放在堆栈中,所以函数返回,局部变量就全没了。

其实在实际应用中,堆栈多用来存储方法的调用。而对则用于对象的存储。

JAVA中的基本类型,其实需要特殊对待。因为,在JAVA中,通过new创建的对象存储在“堆”中,所以用new 创建一个小的、简单的变量,如基本类型等,往往不是很有效。因此,在JAVA中,对于这些类型,采用了与C、C++相同的方法。也就是说,不用new 来创建,而是创建一个并非是“引用”的“自动”变量。这个变量拥有它的“值”,并置于堆栈中,因此更高效。

转载于:https://my.oschina.net/gavinjin/blog/39837

相关文章:

Oracle与JCP执行委员会分享了他们的Java EE策略

Anil Gaur是Oracle集团负责Java EE和WebLogic Server的副总裁。他受邀在上一次的JCP执行委员会会议上发表了演讲&#xff0c;透露了有关Java EE未来发展的一些信息。他所传达的信息和Oracle之前的说法一致&#xff1a;企业编程正在发生变化&#xff0c;Oracle希望适应这种变化。…

5G:新基建的压舱石,如何为新基建按下“加速键”?

受访嘉宾 | 广和通 CEO 应凌鹏记者 | 邓晓娟2019 年&#xff0c;伴随着 5G 的浪潮&#xff0c;5G、AI、AIoT等新兴技术得到了全面的爆发&#xff0c;过去人们认为遥不可及的「高科技」&#xff0c;也逐渐走下“神坛”来进入大家的生活。5G 时代的万物互联&#xff0c;在本次疫情…

no argument specified with option /LIBPATH:错误的解决

作者&#xff1a;朱金灿来源&#xff1a;http://blog.csdn.net/clever101下午使用VS2005编译工程碰到一个链接错误&#xff1a;no argument specified with option "/LIBPATH:"。检查了链接库的文件路径&#xff0c;发现某个路径是非法的&#xff08;即不存在该文件路…

Animation 模拟纸盒的爆破

用简单的Animation动作模拟爆破的瞬间&#xff0c;仔细的调整各种参数效果会更像 原理&#xff1a;用定义好的纸张从onTouch中心点向四面八方散开&#xff0c;散开过程中&#xff0c;使用不用的速度、大小、方向、旋转角度、透明度&#xff08;这里纸张可以加上火焰&#xff0c…

代码恒久远,GitHub 永流传

作者 | 唐小引题图 | GitHub来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;这两天&#xff0c;在 GitHub 上积极贡献代码的许多开发者都收到了「Arctic Code Vault Contributor」的荣誉勋章的通知&#xff0c;并非常兴奋地晒起了朋友圈。因为这标志着自己在 GitHu…

不允许后退的方法

由于项目的需要不允许系统在提交之后&#xff0c;按IE的后退按钮进行再次提交。试试了一下在 .NET中通过如下语句 Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);就可以使页面的缓存失效&#xff0c;每次都需要获取新页面。 <script>history.for…

3个题目熟悉类和对象基础

1、按要求编写Java应用程序&#xff1a; &#xff08;1&#xff09;编写西游记人物类&#xff08;XiYouJiRenWu&#xff09;其中属性有&#xff1a;身高&#xff08;height&#xff09;&#xff0c;名字&#xff08;name&#xff09;&#xff0c;武器&#xff08;weapon&#x…

按下回车表示确定提交

<body οnkeydοwn"if (event.keyCode13) {document.all.button2.click()}"> 下面的五种方法都可以帮你解决这种问题1.<script languagejavascript>function document.onkeydown(){ if (event.keyCode 13) { if (event.srcElement docum…

A股暴跌,户均亏2万!刚写好的辞职信又撕了……

仅用1天&#xff0c;A股市值单日蒸发达到3.5万亿&#xff0c;人均亏了超2万&#xff01;“芯片龙头”企业中芯国际正式登陆科创板&#xff0c;使得半导体板块整体跌幅较小。中芯国际上市首日涨幅超200%&#xff0c;收报82.92元&#xff0c;总市值达6137.57亿元&#xff0c;成为…

DataList在无数据记录时显示类似GridView空模板(EmptyDataTemplate)

在FooterTemplate加个Label并根据repeater.Items.Count判断是否有记录。HTML代码&#xff1a; <FooterTemplate> <asp:Label ID"lblEmpty" Text"No data recprd exist !" runat"server" Visible<%#bool.Parse((DataList1.I…

QButtonGroup 的使用

1、3以后尽量手写&#xff0c;因为没有现在的控件了 2、 1 // lyy : 2016/8/26 12:17:41 说明:存放radioButton2 QButtonGroup *buttonGroup;3 // lyy : 2016/8/26 11:11:55 说明:radioButton4 buttonGroup new QButtonGroup();5 buttonGroup->addButt…

机器学习算法易受攻击?阿里“安全基建”这样应对AI的不安全

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;数字基建的浪潮之下&#xff0c;诸多行业领域都在加速融合5G、大数据中心、AI等新技术&#xff0c;向数字化转型。近日&#xff0c;多位全国政协委员、院士和安全行业专家提出&#xff0c;应尽快出台安全基建国家标准&…

不可以输入中文

function checkCH() {var strtxtPwd.value;var c /[/u4e00-/u9fa5]/;if(c.test(str)){alert("不能输入中文。");return false;}return true; }

tomcat虚拟路径的几种配置方法

tomcat配置虚拟路径的4种方法在tomcat中&#xff0c;webapp文件夹默认为web应用的根目录。1.在tomcat\conf\server.xml中找到 host标签&#xff0c;在host标签中增加新的元素<Context/>并设置 Context的元素&#xff0c;其中path元素所设置的值就是在浏览器中所要访问的虚…

hi35183e增加exfat文件系统的支持

64G-128G的tf卡文件系统格式为exfat&#xff0c;而hi3518e默认只支持fat32格式的tf卡。为了挂载64G以上的tf卡&#xff0c;只能将sd卡先格式化成FAT32。鉴于exfat性能比FAT32强&#xff0c;因此考虑移植exfat驱动到海思3518e平台,这样就不用强制格式化tf卡。 拷贝驱动源码到内核…

XML的简单读取与写入

作者&#xff1a;网际浪子专栏&#xff08;曾用名littlehb&#xff09; http://blog.csdn.net/littlehb/我用的是一种很笨的方法&#xff0c;但可以帮助初学者了解访问XML节点的过程。已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; <?xml ver…

美国 AI 博士一针见血:Python 这样学最容易成为高手!

我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0…

区域链实践第一步——区域链测试环境搭建

区域链光速发展&#xff0c;在许多人的期许下&#xff0c;已经成为了互联网下一个革新点。区块链会成就的未来价值互联网&#xff0c;是新时代的基石。 IBM中国研究院开发的超能云&#xff08;SuperVessel&#xff09;平台提供了给区块链爱好者、开发者的区块链开发测试环境。通…

DataGrid的几个小技巧

作者&#xff1a;网际浪子专栏&#xff08;曾用名littlehb&#xff09; http://blog.csdn.net/littlehb/方法一:使用模版列 我们在绑定好数据的DataGrid增加一个模版列,在列中放置一个按钮<asp:TemplateColumn><ItemTemplate><asp:Button id"btnDelete&q…

32岁程序员面试被拒:比又穷又忙更可怕的,是2020年你还不懂...

在大学阶段&#xff0c;大家都学过概率论、线性代数和微积分的课程&#xff0c;但是为什么在面对机器学习中的数学问题时&#xff0c;却有一种天书的既视感&#xff1f;第一&#xff0c;大学课程中的知识点并没有完全覆盖机器学习领域所需。 回想一下大学概率统计课程内容的内容…

DHCP tftp PXE实现Ghost网络克隆

概述&#xff1a;加ghost参数&#xff0c;实现客户端只需连接网线&#xff0c;在无光驱、软驱的情况下&#xff0c;且无需其他配置&#xff0c;完成网络克隆。所要用到的软件&#xff1a;1、ghost 8.2 企业版中的Ghost Boot Wizard&#xff08;其中的ghost.exe程序可以用ghost1…

PHP文件上传和文件操作案例

<?php /**文件配置变量$dirname是目录名称*/ session_start(); $dirname upload; $fileClass new fileClass($dirname); $fileClass -> fileCMM();/*文件重命名操作*/ $fileClass -> fileDelete();/*文件删除操作*/ ?> <!DOCTYPE html> <html> <…

将模式对话框的返回值回送(PostBack)到服务端

作者&#xff1a;张老三的专栏 http://blog.csdn.net/billy_zh/在一些应用中&#xff0c;希望将模式对话框的值回送(PostBack)到服务端&#xff0c;也就是执行一个服务端操作&#xff0c;从而刷新页面。举个例子&#xff1a;比方说新建一个订单&#xff0c;此时希望能在模式…

android zip解压缩(含有子目录)

为什么80%的码农都做不了架构师&#xff1f;>>> note: 如果目录中含有中文名称&#xff0c; 要用substr new String(substr.getBytes("8859_1"), "GB2312");这样的语句转换&#xff0c;否则为乱码 /*** 解压缩功能.* 将ZIP_FILENAME文件解压…

用Python实现抖音上的“人像动漫化”特效,原来这么简单

作者 | 黄伟呢来源 | 数据分析与统计学之美前几天&#xff0c;女友拉着我和她玩儿抖音&#xff0c;就是这个人像动漫化的操作&#xff0c;顿时觉得很好玩儿。我心想&#xff1a;Python 既然这么强大&#xff0c;是不是也可以使用 Python 程序来实现这样一个操作呢&#xff1f;哈…

easyui在IE中: SCRIPT1003: 缺少 ':'

转载于:https://www.cnblogs.com/FredLee/p/5894614.html

NumPy学的还不错?来试试这20题

来源 | 早起Python&#xff08;ID: zaoqi-python&#xff09;又到了NumPy进阶修炼专题。NumPy大家应该不陌生了&#xff0c;看了太多的原理讲解之后&#xff0c;用刷题来学习是最有效的方法&#xff0c;本文将带来20个NumPy经典问题&#xff0c;附赠20段实用代码&#xff0c;拿…

tomcat报 Context [] startup failed due toprevious errors

今天同事在实施项目中,遇到一个问题,就是项目布到tomcat服务器上了,却总是找不到访问路径.tomcat报 Context [] startup failed due toprevious errors 当时就觉的很郁闷,项目是本机测试完整打包的.按以前的项目实施也很少出现这样的问题.在网上搜索以下解决方案: ------解决方…

DataGrid中自带的分页功能的使用

作者&#xff1a;木子 http://blog.csdn.net/derny/1、把AllowPaging属性设置为true 并设置PageSize的大小 2、在html页面中设置datagrid的属性OnPageIndexChanged"DataGrid_Page" // //DataGrid_Page 为点击页数的时候激发的事件 3、在程序中加入代码如下&…

34补1-2_3 HA Cluster基础及heartbeat实现HA

HA Cluster基础及heartbeat实现HA配置环境node1&#xff1a;192.168.1.121CentOS6.7node2&#xff1a;192.168.1.122CentOS6.7node3&#xff1a;192.168.1.123CentOS6.7vip 192.168.1.80配置前准备# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 loc…