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

1. 寄存器( register )

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

2. 栈( stack )

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

3. 堆( heap )

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

4. 静态存储( static storage )

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

5. 常量存储( constant storage )

  常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分分割开,所以在这种情况下,可以选择将其放在 ROM 中。(这点的一个例子便是字符串常量池,所有字面字符串和字符串常量表达式都被自动intered从而被放到一个特殊的静态存储空间里)

6. 非 RAM 存储

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

最新文章

  1. PAT 1044. 火星数字(20)
  2. C语言回顾-内存管理和指针函数
  3. dp 动态规划 hdu 1003 1087
  4. Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
  5. 转:openwrt中luci学习笔记
  6. linux内核源码结构
  7. 访问MySQL数据库时,报“找不到请求的 .net Framework 数据提供程序。可能没有安装。”的解决方案
  8. HTML5-svg圆形饼状图进度条实现原理
  9. Linux系统——MHA-Atlas-MySQL高可用集群
  10. postgresql 随机函数
  11. Python -- 连接数据库SqlServer
  12. luogu P4051 [JSOI2007]字符加密
  13. Beginning SDL 2.0(6) 音频渲染及wav播放
  14. Valgrind memcheck 8种错误实例
  15. 什么是ASCII码文本文件
  16. s3c2440存储控制器详解
  17. 半小时分组统计个数sql
  18. bzoj 1818 主席树
  19. python调用虹软2.0第二版
  20. Bootstrap学习笔记面板(Panels)

热门文章

  1. Zabbix学习之路(二)之添加主机监控及自定义item监控
  2. ELKStack入门篇(四)之Filebeat
  3. 【RAC搭建报错】libcap.so.1:cannot open shared object file
  4. 自己动手做AI:Google AIY开发工具包解析
  5. NUMA 体系架构
  6. 【转】SWFUpload 官方说明文档(2.5.0版)
  7. ADAS芯片解决方案汇总
  8. 20181023-4 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 01
  9. vim 编码方式的设置
  10. 按Right-BICEP要求的对任务二的测试用例