程序运行时,有五个不同的地方可以存储数据:
1) 寄存器。最快的存储区,它位于处理器内部,但是寄存器的数量及其有限,所以寄存器根据需求进行分配。程序无法直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
2) 堆栈。位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动则分配新的内存,若向上移动则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,java系统必须指导存储在堆栈内所有项的确切生病周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些java数据存储在堆栈中——特别是对象引用,但是java对象并不存储在堆栈中。
3) 堆。一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长的时间。因此,在堆里分配存储有很大的灵活性。但需要一个对象时,只需要用new写一行简单的代码,当执行这段代码是,会自动在堆里进行存储分配。这种灵活性必须要付出代价的:用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间。
4) 常量存储。常量值通常直接存放在程序代码的内部,这样做是安全的,因为它永远不会被改变。有时在嵌入式系统中,常量本身会和其它部分隔离开,可以选择将其放置在ROM(只读存储器)中。
5) 非RAM存储器。如果数据完全存活在程序之外,那么它可以不受程序的控制,在程序没有运行时也可以存在。两个基本的例子就是流对象和持久化对象。在流对象中对象转化为字节流,通常被发送给另一台机器,持久化对象被放置在磁盘上,因此,即使程序终止,它们仍然可以保持自己的状态。这种存储方式的技巧在于:把对象转化为可以存储在其它媒介上的事务。在需要时恢复成常规的、基于RAM的对象。java提供轻量级持久化的支持,而JDBC、Hibernate这样的机制提供了更加复杂的对在数据库中存储和读取对象信息的支持。
分享到:
相关推荐
为此作为Java程序开发人员需要了解各个存储区域的特点以及对性能的影响。然后再根据需要来调整应用程序的区域分配。总的来说,在操作系统中有五个地方可以用来保存应用程序运行中的数据。这类区域的特点以及对性能的...
《计算机应用基础》考试试题历年题
C语言在内存中一共分为如下几个区域,分别是: 1.内存栈区:存放局部变量名; 2.内存堆区:存放new或者malloc出来的对象; 3.常数区:存放局部变量或者全局变量的值; 4.静态区:用于存放全局变量或者静态变量; 5....
当编译一个C++程序时,计算机的内存被分成了4个区域,一个包括程序的代码,一个包括所有的全局变量,一个是堆栈,还有一个是堆(heap),我们称堆是自由的内存区域,我们可以通过new和delete把对象放在这个区域。...
在C#中,虚拟内存中有个两个存储变量的区域,一个称为堆栈,一个称为托管堆,托管堆的出现是.net不同于其他语言的地方,堆栈存储值类型数据,而托管堆存储引用类型如类、对象,并受垃圾收集器的控制和管理 当对象被...
Mapinfo中只有区域才能统计出面积。如果一个图层中全部是区域对象的话,可以在表中新建一个字段,存储区域对象的面积。
静态域(static field): 静态存储区域就是指在固定的位置存放应用程序运行时一直存在的数据,Java在内存中专门划分了一个静态存储区域来管理一些特殊的数据变量如静态的数据变量 常量池(constant pool):虚拟机...
堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当需要创建一个对象时,只需用new写一行简单的代码,当执行这行...
我们知道,C++将内存划分为三个逻辑区域:堆、栈和静态存储区。既然如此,我称位于它们之中的对象分别为堆对象,栈对象以及静态对象。通常情况下,对象创建在堆上还是在栈上,创建多少个,这都是没有限制的。但是...
Android之文件数据存储 一、文件保存数据介绍 ...所有的Android设备都有两个文件存储区域:“内部”和“外部”存储。这篇文章主要是将数据存储,所以在“内部”存储区域存储文件。 二、使用方法 1. 向文件写
因此对 JavaScript 中的复杂数据类型(object)来说,也会有浅拷贝和深拷贝的概念:浅拷贝指两个不同的变量存的是同一个对象的地址,即两个变量指向同一块内存区域;深拷贝则是重新分配了一块内
存储库的组织 对象检测:用于执行对象检测的代码。主要是从CenterNet借来的,安装说明请参考他们的 repo。 半监督分割:用于产生我们的半监督地面实况的代码。 结果:我们对两个评估数据集的结果。 CRV 2020 会议...
直连式存储(DAS:Direct-Attached Storage) 网络化存储(FAS:Fabric-Attached Storage) 网络接入存储(NAS:Network-Attached Storage) 存储区域网络(SAN:Storage Area Network) 主流框架 大数据技术体系图谱全文共96页...
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。 例如,我定义了一个这样的类: class Rec { public...
对象就是内存中专门用来存储数据的一块区域。 对象实际上就是一个容器,专门用来存储各种数据.(比如:数值、字符串、布尔值、None、代码、函数等都是对象) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存...
AndEngineAnimate AndEngine动画类。 与更新处理程序一起使用以移动对象。... 使对象绕给定点旋转使对象在区域中上下移动使对象在区域中左右移动使对象以波动模式左右移动使对象以波动模式上下移动
当编译一个C++程序时,计算机的内存被分成了4个区域,一个包括程序的代码,一个包括所有的全局变量,一个是堆栈,还有一个是堆(heap),我们称堆是自由的内存区域,我们可以通过new和delete把对象放在这个区域。...
左值性(lvalueness)在C/C++中是表达式的一个重要属性。只有通过一个左值表达式才能来引用及...regionofstorage),该存储区域中的内容则代表(represent)了该对象的值(value)。注意到我们这里所说的"代表",对于一