`
zhangzcz1999
  • 浏览: 147560 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转)Java运行时,对象是怎么存储、内存是怎么分配的

阅读更多
1.堆栈:
RAM的一块存储区域,如果堆栈的指针后移,就会创建一块新的内存、如果前移,则会释放那些内存。这种方式不仅快而且效率也非常高。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便指针的前后移动。这样肯定影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——比如对象的引用,但Java对象并不放到其中。
2.堆:
一种常规用途的内存池(也在RAM区域),其中保存了Java对象。编译器不需要知道要从堆里分配多少存储空间,也不需要知道数据在堆里存放多长时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编写相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。这样提高了保存数据的灵活性,但是,效率上肯定受到影响,会降低的。
3.静态存储:
静态:是指“位于固定位置”(也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的,即:只是将对象的成员变量(属性)设置为static、这样就把它存放在静态存储里面。但Java对象本身永远都不会放在静态存储空间。
4.常数存储空间:
常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
5.简单基本类型数据存储:
由于这些简单基本类型的数据在进行程序设计时要频繁用到它们。之所以要特别对待,是由于用new创建对象(特别是小的、简单的变量)并不是非常有效,因为new将对象置于“堆”里。对于这些类型,Java采纳了与C和C++相同的方法。也就是说,不是用new创建变量,而是创建一个并非引用的“自动”变量。这个变量容纳了具体的值,并置于堆栈中,能够更高效地存取。
Java规定了每种简单数据类型的大小。就象在大多数语言里那样,他们的大小并不随着机器结构的变化而变化。这种大小的不可更改性正是Java程序具有很强移植能力的原因之一。
分享到:
评论

相关推荐

    Java运行时内存分配

    本文将详细探讨Java运行时内存分配的六个关键存储区域。 #### 二、Java运行时内存分配的六大存储区域 ##### 1. 寄存器(Register) 寄存器位于处理器内部,是最快速的存储区。但由于数量极其有限,主要用于存储...

    探讨Java的对象是怎么在内存中产生的?

    对象头是对象在内存中的重要组成部分,用于存储对象的运行时数据。对象头的结构可以细分为两部分: 1. **Mark Word**:存储对象的元数据信息,具体包括但不限于: - 哈希码 - GC分代年龄 - 锁状态标志 - 线程...

    java内存对象分配过程研究

    ### Java内存对象分配过程研究 #### 一、引言 Java作为一门强大的面向对象编程语言,在实际开发过程中,对象的创建及其内存管理是至关重要的环节。深入理解对象在内存中的分配过程不仅能够帮助开发者设计出更为...

    java实现内存动态分配

    Java程序运行时,内存分为堆内存(Heap)和栈内存(Stack)。堆内存主要用来存储对象实例和数组,而栈内存主要存储基本类型变量和对象引用。 2. **堆内存分配** 堆内存是Java中的全局共享区域,用于存储所有的...

    Java中堆内存与栈内存分配浅析

    堆内存的特点是动态分配,即对象的大小在创建时不确定,且对象的生命周期也较难预测。由于这些特性,堆内存的管理较为复杂,但同时也为Java应用程序提供了极大的灵活性。 - **特点**: - 动态分配:对象的大小不...

    JAVA中的面向对象与内存解析

    接下来,我们转向内存解析,这是理解Java程序运行时行为的关键。在Java中,内存分为堆内存和栈内存。栈内存主要存储基本类型和对象引用,生命周期短,随着方法调用的结束而销毁。堆内存则用于存储所有对象实例,其...

    java中内存分配

    JAVA 中内存分配的问题是指 Java 程序在运行时如何在内存中存储数据的过程。Java 程序运行时有 6 个地方可以存储数据,它们分别是寄存器、栈、堆、静态存储、常量存储和非 RAM 存储,主要是堆与栈的存储。 栈...

    Java内存分配浅析

    Java内存分配是Java编程中非常重要的概念,它涉及到程序运行时的数据存储和管理。Java程序在JVM(Java Virtual Machine,Java虚拟机)上运行,JVM作为一个平台无关的执行环境,负责Java程序的内存管理和执行。理解...

    java内存分配机制详解

    本文旨在详细介绍Java内存分配机制中的几个关键概念:寄存器、栈、堆、静态域、常量池及其在Java运行时环境中的角色与功能。 #### 二、Java内存分配机制概述 Java内存分配主要涉及以下几个区域: 1. **寄存器**:...

    java核心 内存分配问题

    Java 内存分配是理解Java程序性能和内存管理的关键。Java内存主要分为以下几个部分: 1. **寄存器**:这是最快速的存储区域,但由编译器和硬件直接控制,程序员无法直接操作。 2. **栈内存**:栈主要用于存储基本...

    统计缓存(java对象所占的内存)大小

    1. **Java VisualVM**:这是一个强大的Java性能分析工具,可以显示对象的大小、内存分配和垃圾回收情况。通过“对象”视图,可以观察到对象实例的大小。 2. **JOL (Java Object Layout)**:JOL是一个轻量级库,它...

    java内存对象搜索辅助工具,配合IDEA在Java应用运行时,对内存中的对象进行搜索

    1. **Java内存管理**:Java内存分为堆内存(Heap)和栈内存(Stack),其中堆内存存储对象实例,栈内存存储方法调用。这个工具主要关注的是堆内存中的对象。 2. **IntelliJ IDEA集成**:IntelliJ IDEA是广受欢迎的...

    深入理解java对象,包括对象创建和内存分配

    Java中的方法调用通常为动态绑定,即运行时根据对象的实际类型决定方法版本。 - 调用:执行选定的方法。 优化对象访问也是JVM性能的关键。例如,通过使用方法内联,JVM可以消除方法调用的开销,提高代码执行速度。...

    java程序中的内存分配问题

    Java程序在运行时的内存分配是一个关键的概念,它关乎到程序的性能、稳定性和资源管理。这个主题主要涉及以下几个方面: 1. **JVM内存结构**:Java虚拟机(JVM)将内存划分为几个区域,包括堆(Heap)、栈(Stack)...

    Java对象内存布局 - 小分析

    在Java世界中,JVM(Java虚拟机)是运行Java应用程序的关键组件。它负责解析字节码、管理内存以及执行程序。...通过运行这些脚本,我们可以获取更具体的对象内存占用信息,进一步优化我们的Java应用。

    Java内存分配原理精讲

    本文旨在深入探讨Java内存分配的基本原理及其在不同内存区域的具体表现,帮助读者更好地理解Java程序运行时内存的使用情况。 #### 二、Java内存区域概述 Java程序在运行时会根据不同的数据类型和生命周期将其分配...

    JAVA对象所占内存大小计算例子

    首先,我们需要理解Java对象内存占用的基本原理。每个Java对象都由三部分组成:对象头(Object Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含对象引用和类型信息,实例数据是对象实际存储...

    java实现的内存分配

    堆内存用于存储对象实例,而栈内存则用于存储方法调用时的局部变量和方法参数。除此之外,还有方法区(Method Area)、程序计数器(PC Register)以及本地方法栈(Native Method Stack)等组成部分。 轮转法(Round...

Global site tag (gtag.js) - Google Analytics