在JAVA中,有六个不同的地方可以存储数据:

1. 寄存器(register)。 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。

------最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.

2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些 内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成 相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些JAVA数据存储在堆栈中——特别是对象引用,但是JAVA对象不存储其 中。

------存放基本类型的变量数据和对象,数组的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)

3. 堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所以的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区 域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候,只需要new写一行简单的代码,当执行 这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。

------存放所有new出来的对象。

4. 静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字static来标识一个对象的特定元素是静态的,但JAVA对象本身从来不会存放在静态存储空间里。

------存放静态成员(static定义的)

5. 常量存储(constant storage)。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中

------存放字符串常量和基本类型常量(public static final)

6. 非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

------硬盘等永久存储空间 就速度来说,有如下关系:

寄存器 >堆栈 > 堆 > 其它

这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。

栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。

Java存储 转侵删相关推荐

  1. Java 内存模型 侵删

  2. XCTF pwn例题思路整理 侵删

    XCTF pwn例题思路整理 侵删 1 .decode("iso-8859-1") 处理报错 2 read() 栈溢出 函数定义:ssize_t read(int fd, void ...

  3. UE-C++进阶之路 | Epic 大钊 视频学习记录(侵删)

    原视频文字全记录,侵删 如有错处,参见 原视频链接 一. 虚幻社区经理-大钊介绍 知乎:虚幻引擎 B站:虚幻引擎官方 QQ群:1018846968,微信群:unrealengine QQ:272293 ...

  4. .pgr照片文件解析,C++与Java存储数据差别大小端模式

    一..pgr是什么? .pgr文件是二进制的图像文件,可以用普通的文本文件打开,或者查看十六进制的文本信息: 读取需要了解~~~非常重要 !!! 基本数据类型的大小端存储模式 表头Header 详细信 ...

  5. java 存储数据到文件中_本机速度文件支持的“纯” Java大数据存储

    java 存储数据到文件中 动机 所有这一切始于意识到我买不起足够大的计算机. 音频处理需要大量的内存. Audacity是一款出色的免费音频处理器,它使用文件支持的存储系统对其进行管理. 这是解决此 ...

  6. Redis安装说明(转 侵删)

    Redis安装说明(转 侵删) 1.单机安装Redis 1.1.安装Redis依赖 1.2.上传安装包并解压 1.3.启动 1.3.1.默认启动 1.3.2.指定配置启动 1.3.3.开机自启 2.R ...

  7. 包及权限配置java存储机理绘制

    包及权限配置 包的声明和导入 //声明 package aa.bb.cc; public class A{;} class B{;} //即在java输出目录aa.bb.cc中放入编译后的A.clas ...

  8. java存储音频文件及校验与读取

    java存储音频文件及校验与读取 音频存储为音频流 前端部分 后端部分 音频流转换为文件 后端读取音频流-controller 音频存储为音频流 前端部分 前端html 注意:前端使用的是Angula ...

  9. 矩阵和数学空间的通俗理解,侵删

    帮助初学者对矩阵和数学空间学习的理解和记忆 注:转载自孟岩大佬的BLOG.链接发不出来就打了原创.侵删. 前不久chensh出于不可告人的目的,要充当老师,教别人线性代数.于是我被揪住就线性代数中一些 ...

最新文章

  1. ehchache验证缓存过期的api_ASP.NET Core ResponseCache进行缓存操作
  2. 解决vue-cli 打包后静态资源路径不对的问题
  3. 如何利用传感器控制数据中心能耗
  4. QT 4.8.5支持电容触摸屏 和 鼠标
  5. java12章_从零开始学Java 第12章 异常处理
  6. vue中实现美团双级联动菜单
  7. 2011考研数学概率论基础复习必备知识点
  8. 委托事件实现更新窗体
  9. ASP+AJAX制作无刷新新闻评论系统01
  10. 二级c语言笔试58,全国计算机等级考试-二级C语言笔试试题.doc
  11. 软考初级程序员考试大纲
  12. 显卡识别为Microsoft基本显示适配器,安装9700k核芯显卡HD630驱动或安装其他核显驱动
  13. 人体姿态估计之CPN中文文献翻译
  14. [递推] 费解的开关
  15. 【问题】SQL远程过程调用失败
  16. 如何开展系统安全测试
  17. c语言魔方还原程序案例,利用C语言玩转魔方阵实例教程
  18. python提现_赶紧参加微信支付获取微信提现免费额度
  19. 上网方式不正确导致路由器无法连接外网
  20. 第三章 事物的联系,发展及其规律

热门文章

  1. 树莓派综合项目2:智能小车(三)无线电遥控
  2. 在Deepin15.11下用独立显卡及游戏手柄玩Steam平台上的游戏
  3. CSS三大模块(一):盒子模型
  4. 移植u-boot-2016.11到JZ2440(二:分析启动流程)
  5. x3100服务器设置linux启动,IBM System x3100服务器常见问题解答
  6. 【论文总结】LINE和DEEPWALK方法总结与比较
  7. Python基础之网络编程
  8. 获取磁盘信息并扫描是否连接移动磁盘之JS版
  9. php 自动关键词,基于Php实现自动获取关键词的分析
  10. ML (Chapter 3): 线性模型