码迷,mamicode.com
首页 > 编程语言 > 详细

javaSE之存储区的分类

时间:2015-05-13 00:51:43      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

java 存储区

寄存器(register):

  寄存器与其它的存储区不一样,它是位于cpu中,是存取速度最快的存储区,但由于寄存器的数量有限,它的分配由cpu按需分配,程序员没有必要去分配,也不能让程序员去分配。

栈(stack)

  位于RAM中,并通过cpu直接支持的栈指针(stack pointer)来进行操作,sp通过向下移动(sp+1)来分配新的存储空间,向上移动(sp-1)来释放存储空间。它是仅次于寄存器的一种快速分配存储空间的方式。创建程序期间,Java编译器必须知道在栈上的所有数据的准确大小和生命周期,这样它才能产生栈指针来上下移动分配释放存储空间。但这样也限制了代码的灵活性。如某些java存储区在栈上时--对象的引用,而java的对象本身不是存储在栈上的(java对象存储在堆中)。

堆(heap)

  在RAM中,存储java对象的内存池,与栈相比较而言,java编译器不必知道堆具体分配了多大的存储空间和它的生命周期是多长。因此在堆上分配存储空间更加灵活方便,无论你何时想分配存储空间,只需使用new 关键字,当这段代码被执行时,就在堆上分配了存储空间。这样有了灵活性的时候,也增加了时间的开销。

静态存储区(static storage):

  静态(static) 表示一个固定的存储区域,也是在RAM中,静态存储区包括整个运行期间都有效的数据。可以用static来指定特殊的对象为静态的。但java对象本身不是静态的。

常量存储区(constant storage):

常量通常被直接放置在程序代码当中.这是安全的,因为它们永远不能被改变.在某些时候多个常量能够自己分隔开,这样在嵌入式系统中可以被任意地放置在只读存储器(ROM)中。

 非RAM存储区(non-RAM storage):

  如果数据完全存在于程序之外,在程序未被运行时数据也能存在,而不受程序的控制.对于此类情况,有两个主要的例子来说明:一,对象流(streamed objects),这种对象通常以字节流的形式被送到其他的机器去.二,持久化对象(persistent objects),这种对象存放在磁盘上,即便是程序中止以后它们仍然保持原有状态.这些存储器都是将对象以某种形式保存在其他的介质中,然后在需要的时候再把它恢复为常规的基于RAM的对象.Java提供了对轻量级持久性的支持.在未来的Java版本中,Java将提供更加完备的持久性的支持.

javaSE之存储区的分类

标签:

原文地址:http://www.cnblogs.com/Dandelion0301/p/4499126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!