黑马程序员技术交流社区

标题: JAVA寄存器到底存储的是什么东东 [打印本页]

作者: 梦想蓝色天空    时间: 2013-8-24 10:23
标题: JAVA寄存器到底存储的是什么东东
本帖最后由 梦想蓝色天空 于 2013-8-27 16:33 编辑

刚刚复习之前很基础的东西,发现有很多东西还是一知半解,抱着学则必会的原则,又来这里请教基础问题啦,请大师不吝赐教
我们知道JAVA存储方式一共有这么几种
堆 存放创建的对象
栈 存放基本类型的数据 及对象的引用
常量池  存放的是我们在代码是创建的final常量
别的存储 顾名思义,存储在别的地方的元素,速度肯定是最慢的

寄存器  这个存放的是什么东东???????????
因为在这里存放的数据操作是最快的,我请教别人同学。有的说是方法名,类名一类的东西也有点含糊不清 ,但是百度了一下也没有找到官方的说法,特地请教

作者: 黑马-文鸿利    时间: 2013-8-24 11:07
寄存器(Registers):
     这是速度最快的存储场所,因为寄存器位于处理器内部,这一点和其他的存储媒介都不一样。不过寄存器个数是有限的。在内存中的寄存器区域是由编译器根据需要来分配的。我们程序开发人员不能够通过代码来控制这个寄存器的分配。所以说,这第一个存储区域寄存器,我们只能够看看,而不能够对其产生任何的影响。,也没办法在程序里头感觉到寄存器的任何存在迹象。
(2)、Stack(堆栈):
    位于一般的RAM中。处理器经由指针提供直接支持。当程序配置一块新的内存时,stack指针便往后移;释放内存时,指针则往前移。这种方式不仅很快,效率也高,速度仅次于寄存器。用于存放对象引用以及基本的数据类型对象,不能用于存储Java对象本身。
(3)、Heap(堆):
    一种通用的内存空间,用来存放Java对象。Heap不同于stack之处在于,编译器不需知道究竟得从heap中配置多少空间,也不需知道从heap上配置的空间究竟需要存在多久。因此,自heap配置存储空间可以获得高度的弹性。每当你需要产生对象,只需在程序中使用new,那么执行的时候,便会自heap配置空间。当然,你得为这样的弹性付出代价:从heap配置空间,比从stack配置,所耗费的时间多了不少。
(4)静态存储区域与常量存储区域:
    静态存储区域就是指在固定的位置存放应用程序运行时一直存在的数据,Java在内存中专门划分了一个静态存储区域来管理一些特殊的数据变量如静态的数据变量,需要明确的一点就是,Java对象是不保存在这个地方的,而只是把对象中的一些特殊元素放置这。

    在Java对象中还有一类特殊的元素,我们叫做常量。由于常量的值是稳定不变的,如圆周率。为此把他们放在代码的内部是可行的。不过有些时候,在进行一些嵌入式系统开发的时候,我们往往不这么做。而是会把常量元素跟代码分开来保存。如我们会根据情况把常量的值存放在一些只读存储器中。这主要是为了一些特殊的功能考虑的。如出于版权控制的需要。如在打印机上为了保护原装耗材的版权,往往把常量跟代码分开存放
(5)非RAM存储:
    有时候,有些程序运行所需要的数据我们还会放置在其他地方。如在一些系统中需要用到流对象,这个对象的数据并没有保存在上面所谈到的任何一个存储区域,这个对象直接被转为为字节流,发送到其他的主机上去了。另外有一种叫做持久化的对象,其是被存储在硬盘中的
作者: 梦想蓝色天空    时间: 2013-8-24 11:13
黑马-文鸿利 发表于 2013-8-24 11:07
寄存器(Registers):
     这是速度最快的存储场所,因为寄存器位于处理器内部,这一点和其他的存储媒介 ...

这个我在百度上搜到过。知道他是最快的,但是他内部到底存储的是什么东西呢,,比如堆是存对象的,栈是存基本数据类型的数据和引用的。。。寄存器呢,存的是什么了
作者: 相许。    时间: 2013-8-25 19:30
在 JVM的体系结构中不使用寄存器而使用栈存储中间数据。
作者: 梦想蓝色天空    时间: 2013-8-27 16:33
相许。 发表于 2013-8-25 19:30
在 JVM的体系结构中不使用寄存器而使用栈存储中间数据。

明白了。谢谢{:soso_e121:}
作者: 范龙波    时间: 2013-8-27 17:32
dalvik vm 使用的是寄存器, 这也是跟jvm 区别之一




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2