`
afunti
  • 浏览: 103539 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

java中数据存储问题--堆、堆栈、寄存器

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

    在Java对象中还有一类特殊的元素,我们叫做常量。由于常量的值是稳定不变的,如圆周率。为此把他们放在代码的内部是可行的。不过有些时候,在进行一些嵌入式系统开发的时候,我们往往不这么做。而是会把常量元素跟代码分开来保存。如我们会根据情况把常量的值存放在一些只读存储器中。这主要是为了一些特殊的功能考虑的。如出于版权控制的需要。如在打印机上为了保护原装耗材的版权,往往把常量跟代码分开存放
(5)非RAM存储:
    有时候,有些程序运行所需要的数据我们还会放置在其他地方。如在一些系统中需要用到流对象,这个对象的数据并没有保存在上面所谈到的任何一个存储区域,这个对象直接被转为为字节流,发送到其他的主机上去了。另外有一种叫做持久化的对象,其是被存储在硬盘中的

速度:
    寄存器 > 堆栈 > 堆 > 其他
分享到:
评论
1 楼 ruyi0127 2015-07-05  
解释的挺好 给力

相关推荐

    java堆栈的区别 -- 详解

    注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始...

    [java]读书笔记整理:一切都是对象

    用堆进行存储分配比用堆栈进行存储分配需要更多的时间(如果确实可以在java中向在C++中一样在栈中创建对象)。 4) 静态存储 这里的“静态”是指“在固定的位置”(尽管也在RAM里)。静态存储里存放程序运行时一直...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

    java语言教学PPT(基础版)

    从结构上看,它由一组抽象的部件组成,这些部件包括指令集、寄存器组、类文件格式规定、堆栈、内存垃圾收集区和存储区六部分。JVM仅仅规定了部件的功能和规格,但并没规定部件的具体实现技术。所以,JVM是一种不具体...

    汇编语言常见面试题.pdf

    汇编语言中的数据存储方式有哪些?请说明在汇编语言中的数据存储方法。 什么是汇编语言中的标号(Label)?请说明在汇编语言中的标号的用途。 汇编语言中的伪指令(Pseudo-instructions)是什么?请说明伪指令在汇编...

    30道JVM综合面试题详解含答案(值得珍藏)

    JVM包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。 JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等...

    Java虚拟机

    4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 VisualVM:多合一故障处理工具 4.4 本章小结 第5章 调优案例分析与实战 ...

    java外卖系统源码-zs:零脚本

    java外卖系统源码 说真的,这让我重新燃起了对技术的希望。 谢谢@hintjens -- Jason J. Gullickson @jasonbot2000 一些非常有趣的想法......尤其是。 对于#IoT 应用程序——Till Hänisch @TillHaenisch 这是开玩笑...

    初级java笔试题-virtual_computer:虚拟计算机

    初级java笔试题该项目 虚拟计算机是一个漫长的项目,在此期间我从头开始构建了一个非常简单但功能强大的计算机和一种编程语言。...CPU很简单,只有两个寄存器,一个内存寻址寄存器A和一个数据寄存器D,一个程序计数器PC

    java8rt.jar源码-coderfun:《码农翻身》笔记

    多进程下为了解决内存地址覆盖的问题,需要记录每个程序的起始地址(基址寄存器),遇到与地址有关的指令,都要把地址加上基址寄存器的值,才是真实地址 分时系统 如果一个进程耗时很长,必须让出CPU去执行其他程序...

    【最新Android高级面试知识点干货分享(三)】

    【最新Android高级面试知识点干货分享(二)】...栈(Java栈/堆栈Stack):用来存储对像的引用,基本类型的数据。优点:存取速度快,仅次于寄存器,栈数据可以共享。缺点:存在栈中的数据大小与生存期必须是确定的。 本地

    jvm指令手册 +JVM必知必会,掌握虚拟机编译过程.rar

    Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改...

    JVM内存模型及垃圾回收

    通俗的来讲,jvm主要分为5个部分 程序计数器、虚拟机枝、本地方法枝、 Java 堆、 方法区, 引用大佬总结的概括程序计数器用于存放下一条运行的指令,虚拟机栈和本地方法栈用于存放函数调用堆栈信息, Java 堆用于...

Global site tag (gtag.js) - Google Analytics