存储数据

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(堆中)

存在与内存中,存取方式灵活,无需编译器关心,速度比不上Stack4、Static (静态类型)

整个程序都可以访问,对象的属性可以是静态的,但JAVA对象不会是静态的.5、Constant(常量)

存在于程序代码中,不能改变6、非易失性数据

a、流类型数据

b 、持久性数据

java存储数据_Java中六种数据存储方式相关推荐

  1. java变量存储位置_java 中变量存储位置的区别

    [原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  2. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    https://www.zybuluo.com/aitanjupt/note/209941 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存 ...

  3. 存储在Redis中的数据多大比较合适

    存储在Redis中的数据多大比较合适 背景 过大的数据对 Redis 的影响 『过大』的定义是什么 结论 背景 本文是工作中应对一个实际业务场景的调研总结过程.在使用 redis 作为数据缓存的时候, ...

  4. java筛选表格,java怎么获取excel中的数据_java筛选excel数据

    你好! 请教你个问题 java web程序如何将读取的excel表格里的数据插入到数据库,并显示在JSP页面上? 主要用poi.jar 包.包含两jar就可以了:poi-3.16.jar.poi-oo ...

  5. java如何向数据库中插入数据_如何控制Java代码向数据库中插入数据

    慕哥6287543 Java程序向数据库中插入数据,代码如下:123456789101112131415161718192021222324252627282930313233343536373839 ...

  6. java file 方法_JAVA中File的常用方法

    一.File类中包含了很多获得文件或文件夹属性的方法,使用起来比较方便,下面将常见的方法介绍如下: a.createNewFile方法 public boolean createNewFile() t ...

  7. 如何在data visualization 中update svg_如何操作小程序页面中data数据区中的数据

    前言 在微信小程序中,每一个页面都有一个独立的js文件,用来实现该页面的业务逻辑.这个js文件通常采用Page()方法来对页面进行注册.其中系统为页面设置了一个名为data的区域,用来存储页面的初始数 ...

  8. 快用云科阎志涛:现代数据栈中的数据建模

    嘉宾 | 阎志涛   整理 | 黄引红 出品 | CSDN云原生 现代数据栈作为与数据分析相关的技术栈,具有云原生的特性,它与传统的数据平台相比较,降低了数据使用的技术门槛,也能满足用户日益扩大的数据 ...

  9. java 字符串总结_Java中字符串(String)总结

    先说说JDK API: JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口,这些功能以类的形式封装). JDK API包含的 ...

最新文章

  1. jstree中文api文档_开发中文 API 的一些策略
  2. Centos7安装go-1.9.2
  3. Dlib模型人脸特征检测原理及demo
  4. linux 禁ping设置
  5. 表单提交,以及标注。
  6. CF981E Addition on Segments 线段树分治 + bitset优化
  7. 运用Appium 实现添加微信好友自动化
  8. 红帽 安装oracle11g,64位RedHat 5.6下安装Oracle 11g
  9. java怎么安装_Java怎么安装?Java运行环境安装教程
  10. 计算机网络—体系结构相关真题练习(二)
  11. C++ 实数和二进制操作入门
  12. python支持按指定字符串分割成数组_按固定元素数目分割数组- perl,python
  13. win10主题美化(单)
  14. MySQL 8.0.27 下载、安装与配置 超详细教程(Windows64位)
  15. Hi3519av100 编译kernel
  16. linux分区表导出与恢复,linux下磁盘分区表的备份和恢复
  17. 数据有效性跨表引用的解决
  18. 用相关法辨识系统的脉冲响应 matlab,利用相关分析法辨识脉冲响应
  19. Selenium-Chrome环境配置
  20. 修改自带input样式input:-internal-autofill-selected为透明色

热门文章

  1. 功率放大器的主要指标有哪些呢
  2. mediapipe KNN 基于mediapipe和KNN的引体向上计数/深蹲计数/俯卧撑计数【mediapipe】
  3. 【解决方案】如何把视频内的声音和文字翻译成新的字幕或者配音
  4. C#调用Win32 api学习总结
  5. jerasure纠删
  6. 一文看懂钢板测宽仪的特征性能
  7. 4个非常实用的Java项目,快用起来
  8. 瓜分20亿拿喵币攻略(30个喵铺)
  9. 照片变漫画怎么做?两分钟教会你四个小技巧
  10. 解决tomcat端口一直被占用的5种方法