`
afunti
  • 浏览: 105512 次
  • 性别: 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堆栈的区别 -- 详解

    例如,在栈中直接访问数组元素,可以直接读取到寄存器中,而在堆中需要先读取指针值再到内存中读取数据。 #### 四、总结 堆和栈的区别主要体现在以下几个方面:自动管理与手动管理、固定大小与动态调整、高效与...

    java中堆(heap)和堆栈(stack)有什么区别

    Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,分别用于存储不同的数据类型和对象。堆栈(stack)是 Java 中的一种内存区域,用于存储基本类型的变量和对象的引用变量。堆(heap)是 Java 中的一种动态...

    Java虚拟机特性JAVA SE 7.pdf-中文完整书签文字版

    - **加载与存储指令**: 介绍了如何从堆栈中加载数据到寄存器,以及如何将数据从寄存器存储回堆栈。 - **算术指令**: 包括加法、减法、乘法、除法等基本运算指令。 - **类型转换指令**: 如何在不同类型之间进行转换。...

    【IT十八掌徐培成】Java基础第26天-01.回顾-JVM初步使用.zip

    JVM是Java Virtual Machine的缩写,它是Java语言的一个关键组成部分,它是一个虚构的计算机,具有完整的硬件架构,如寄存器、堆栈、CPU等。JVM使得Java程序可以跨平台运行,因为它提供了一个统一的运行环境,屏蔽了...

    Java数据存储

    本文将深入探讨Java数据存储的关键概念,包括堆栈、堆、数据区等,以及它们各自的特点和适用场景。 #### 一、堆栈(Stack) 堆栈是一种后进先出(LIFO)的数据结构,主要用于存储方法调用时的局部变量和方法参数。...

    Java 中的堆和栈

    Java编程语言中,内存管理是至关重要的概念,...总的来说,Java中的堆和栈内存是程序运行的基础,它们共同协作以提供高效、可靠的数据存储和管理。了解这两个内存区域的工作原理,有助于写出更高效、更稳定的Java代码。

    java线上故障分析-线程dump,堆内存分析

    在现代软件开发中,Java作为一门广泛使用的编程语言,在企业级应用、Web服务、大数据处理等多个领域发挥着重要作用。然而,随着系统复杂度的提升,线上环境中遇到的各种故障问题也日益增多。这些故障可能源于JVM自身...

    Java运行时内存分配

    与堆栈不同的是,编译器不需要预先知道要从堆中分配多少存储空间,也不必知道存储的数据在堆中存活的时间。这意味着在堆中分配内存具有很大的灵活性。只需使用`new`关键字创建对象即可,Java运行时系统将自动在堆中...

    openjdk-research.堆栈内存布局1

    在Java编程语言中,堆栈内存布局主要涉及Java虚拟机(JVM)的栈帧(Stack Frame)结构,这是执行方法时的一个重要概念。本文将深入解析OpenJDK中的堆栈内存布局,特别是针对hotspot虚拟机的部分。 首先,我们要理解...

    java 中finally语句块与return的执行关系

    在 Java 中,基本类型变量存储在栈中,而引用类型的对象存储在堆中,对象的引用地址存储在栈中。因此,在 finally 中改变基本类型变量的值对返回值没有任何影响,而改变引用类型变量的值则有影响。 通过上面的讨论...

    深入java虚拟机

    JVM的数据区包括程序计数器、Java堆栈、本地方法栈、堆以及方法区。其中,方法区存储类的元数据,如类型信息、常量、静态变量等;堆是所有线程共享的,用于对象实例的分配。 4. **数据区详解** - **程序计数器(PC...

    java中堆与栈的区别

    ### Java中堆与栈的区别详解 #### 一、概述 在Java编程语言中,了解堆与栈的区别对于理解和管理程序的内存使用至关重要。本文将详细解释Java中的堆和栈的概念,以及它们之间的区别。 #### 二、Java堆 Java堆是...

    java对象的概念-new.docx

    2. **堆栈**:用于存储程序运行过程中的局部变量和函数调用信息,速度较快,但大小和生命周期由编译器严格控制。 3. **堆**:用于存储Java对象,提供更大的灵活性,因为编译器不需要知道对象的具体大小和生存期。在...

    Java技术与Java虚拟机

    Java的堆是运行时数据区,所有对象实例都在堆中创建。堆内存管理涉及垃圾收集,自动释放不再使用的对象,以防止内存泄漏。Java API提供了大量的类库,使得开发者能够利用预定义的功能构建应用程序,无论是应用程序...

    Java堆,栈和常量池详解

    Java程序运行时会使用到不同的内存区域来存储各种类型的数据,这些区域包括:寄存器、虚拟机栈、本地方法栈、Java堆、方法区(或称为非堆)以及程序计数器。本文主要聚焦于Java堆、栈和常量池。 #### 1. Java栈 ...

    栈和堆栈的区别和联系

    标题和描述中的核心知识点主要集中在计算机科学领域中的数据存储机制,特别是栈(stack)和堆(heap)的区别和联系。为了深入理解这些概念,我们不仅需要掌握它们的基本定义,还要了解它们在实际编程中的应用以及与其他...

    2020 兴业银行Java笔试题

    堆是Java内存模型中的一部分,主要用于对象实例的存储。在Java中,堆内存分为新生代(Young Generation)、老年代(Tenured Generation)和永久代(Permanent Generation,Java 8后被元空间取代)。堆内存的大小...

    java考试复习资料

    - **JVM组成**:包括寄存器、堆栈和处理器等组件,其中寄存器用于临时存储数据,堆栈用于管理函数调用和局部变量,处理器则是解释或执行字节码指令的核心部件。 #### 五、垃圾回收机制 Java的垃圾回收机制自动管理...

    Java面试题和答案共60道.docx

    - JVM是Java程序的执行引擎,它包括寄存器、堆栈和处理器等组件,负责解析和执行字节码。 5. **内存管理** - Java的垃圾回收机制自动管理内存,开发人员通常不需要手动回收内存。 6. **JDK与JRE** - **JDK**...

Global site tag (gtag.js) - Google Analytics