java程序运行时,数据的存储地!
来源:互联网 发布:怎样在淘宝上做供货商 编辑:程序博客网 时间:2024/06/07 06:04
程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:
(5) 常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM) 。
(6) 非 RAM 存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象” 。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复成普通的、基于 RAM 的对象。Java 1.1 提供了对 Lightweight persistence 的支持。未来的版本甚至可能提供更完整的方案。
(1)寄存器。这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
(2)堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java 编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间” 。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些 Java 数据要保存在堆栈里——特别是对象句柄,但 Java 对象并不放到其中。
(3) 堆。一种常规用途的内存池(也在 RAM 区域) ,其中保存了 Java 对象。和堆栈不同, “内存”或“堆” (Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(4)静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但 Java 对象本身永远都不会置入静态存储空间。(5) 常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM) 。
(6) 非 RAM 存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象” 。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复成普通的、基于 RAM 的对象。Java 1.1 提供了对 Lightweight persistence 的支持。未来的版本甚至可能提供更完整的方案。
0 0
- java程序运行时,数据的存储地!
- java程序运行时数据存储
- Java的运行时数据存储机制
- Java的运行时数据存储机制
- Java 运行时数据存储的地方
- JAVA程序运行时保存数据的六个地方
- java程序的数据存储方式
- 目标程序运行时的存储组织
- 利用Bat处理文件,快速地运行java程序
- java程序运行时会存储到什么地方
- 如何优雅地终止正在运行的Spark Streaming程序
- Java获得查询数据、运行程序花费的时间
- Java程序的运行
- Java程序的运行
- 数组的应用以及建立临时容器存储程序运行产生的数据-作者:逝秋
- 实验 3.1.5 查看代码中各数据存储位置 示例程序: mem_add.c 1. 在自己的机器上运行示例程序。 2. 分析实验结果,图示程序运行时各数据位置。
- 程序运行时Java数据保存到什么地方
- JAVA的数据存储
- 15个最容易得罪人的行为,却常常被我们忽略
- BeanPropertyRowMapper使用注意事项
- 防止c程序运行一闪而过
- android开发书籍推荐 重零开始
- 二维码生成工厂
- java程序运行时,数据的存储地!
- 线程的sleep()方法和yield()方法的区别
- 近期系统更新出现的问题记录
- Bochs 2.6.8的配置文件bochsrc.bxrc修改
- 为已有的web项目添加maven支持
- 单链表实现学生成绩从高到低排序(C语言)
- AJAX——核心XMLHttpRequest对象
- Android开发必备工具类
- nginx基于lua-resty-upload实现文件上传