`
xuanzhangyang
  • 浏览: 5294 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java数据保存与内存分配

阅读更多

       在叙述以下问题时先解释一下java中的堆与栈:

       栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

       栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要 在运行时动态分配内存,存取速度较慢。

       一般情况下,可以保存数据的地方有6个:寄存器、栈、堆、静态存储、常数存储和非RAM存储。其中,寄存器是保存数据最快的地方,但是它的数量有限且程序不能直接控制。栈、堆和静态存储都在于RAM中。其中栈保存数据的速度仅次于寄存器,一些基本类型变量和对象的引用变量数据可以保存在栈中,堆中保存的数据灵活性会更大一些,可以用来保存Java对象。被static修饰的数据可以保存在静态存储区域。常数存储,就是用来存储常数的。下面看一下一维数组和二维数组的内存是如何分配的:

        一维数组:

         int [] a; 当声明这个一维数组时,就会在栈中产生一个与该数组名相同的引用变量a,由于只是数组的声明,并未产生一个实际的数组,所以堆中不有保存任何信息。声明一个数组后,就要使用new创建这个数组,a=new int[5];这时堆中就会分配一块内存给数组,此时,栈中的a中存放的就是堆中这块内存的首地址,

创建完后,就可以用for循环为数组赋值了。

        二维数组:

        int[][] a;声明时与一维数组类似,创建这个二维数组:a=new int[3][];这种创建数组的方式未确定第2维的大小,此时堆栈分配情况如下图:

      再指明第二维数:

a[0] = new int[1];
a[1] = new int[2];
a[2] = new int[3];

 此时,数组的内存分配如图:

 最后再给这个不规则数组赋值,也就是改变堆中分配的内存中那些0的值。

 

        这就是数组的创建和初始化的过程中,java内存分配的过程。当在使用中没有任何的引用变量去指向数组时,该数组就会被JVM当成垃圾自动回收了。

 


 

  • 大小: 11.3 KB
  • 大小: 8.9 KB
分享到:
评论

相关推荐

    java内存分配机制详解

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

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

    Java内存分配策略与堆栈的比较: 1. 静态存储分配:在编译时就能确定每个数据目标的内存需求,适用于常量、全局变量等静态数据。 2. 栈式存储分配:运行时根据需要分配,遵循先进后出原则,适用于局部变量和函数调用...

    深入Java核心 Java内存分配原理精讲

    本文将聚焦于Java内存分配的核心概念,包括栈、堆、常量池等关键区域的功能与使用场景,帮助读者深入理解Java内存管理的内在逻辑。 ### 一、Java内存模型概述 Java内存模型主要包括以下几个部分: 1. **寄存器**...

    深入Java核心_Java内存分配原理精讲(1)

    标题和描述均聚焦于“深入Java核心_Java内存分配原理精讲”,这表明文章旨在深入探讨Java编程语言中关于内存分配的关键概念和技术细节。本文将根据这一主题,详细阐述Java内存管理的各个方面,包括栈、堆、常量池等...

    JAVA中的内存分配策略

    ### JAVA中的内存分配策略 #### 一、内存分配的基本概念 在探讨JAVA中的内存分配策略之前,我们需要了解一些基本的概念。 - **静态存储分配**:指的是在编译时就能确定每个数据目标在运行时刻的存储空间需求,...

    Java内存分配全面解析

    Java内存分配全面解析 Java程序在执行过程中,其内存分配主要涉及到JVM(Java Virtual Machine,Java虚拟机)的不同区域。这些区域包括寄存器、栈、堆、常量池、代码段和数据段。理解这些内存区域的工作原理对于...

    深入Java内存分配

    Java内存分配主要依据数据类型的不同而有所差异: - **基础数据类型**:直接在栈空间分配。 - **方法的形式参数**:同样在栈空间分配,方法调用结束后回收。 - **引用数据类型**:使用`new`关键字创建,会在栈空间...

    深入Java核心 Java内存分配原理精讲(对于没有接触过java内存的程序员很有用)

    深入理解Java核心:Java内存分配原理精讲 Java内存分配是理解Java运行机制的关键部分,尤其对于初学者而言,掌握这一原理能显著提升编程效率和代码质量。Java内存分配涉及多个区域,包括栈、堆、常量池等,每个区域...

    JAVA内存分配与管理.doc

    Java内存分配与管理是理解Java程序性能和稳定性的重要概念。Java内存主要分为以下几个区域: 1. **寄存器**:这是CPU内部的一部分,用于存储运算过程中的临时数据,程序员无法直接控制。 2. **栈(Stack)**:栈...

    Java中堆内存和栈内存详解

    Java的内存分配策略主要包括静态分配、栈式分配和堆式分配。其中,栈式分配和堆式分配是运行时动态进行的,具体如下: 1. **栈式存储分配**:栈式存储适用于已知大小的局部变量和方法参数。当一个方法被调用时,JVM...

    java中多态的内存分析

    Java中的多态性是面向对象编程的一个核心特性,它允许我们使用父类引用指向子类对象,从而...理解多态和内存分配对于深入理解Java程序的运行机制至关重要。在实际编程中,应充分利用多态来设计高效且易于维护的系统。

    oracle 内存分配与调整 。pdf

    本文将深入探讨Oracle内存分配的相关知识点,以及如何进行调整以优化数据库性能。 Oracle内存主要分为两个主要部分:SGA(System Global Area)和PGA(Program Global Area)。SGA是数据库进程共享的一块内存区域,...

    java程序自我监视内存使用

    其中,堆内存存储对象实例,栈内存保存基本类型和引用,方法区存储类信息,程序计数器用于记录线程执行的位置,本地方法栈为JNI调用服务。 2. **内存监视的重要性** 自我监视内存使用可以帮助开发者及时发现程序中...

    wxh oracle内存分配

    "wxh oracle内存分配"这个主题主要关注Oracle数据库在运行时如何管理和使用内存资源,以提高查询速度和整体系统效率。Oracle内存结构主要分为两个主要部分:SGA(System Global Area)和PGA(Program Global Area)...

    常用数据数据加载到内存中

    Java中的内存管理主要由垃圾收集器自动进行,但程序员仍需理解内存分配原理,避免内存泄漏。 2. **数据结构与内存**: 数据结构的选择直接影响内存使用效率。例如,数组、链表、哈希表等在内存中占用的空间不同,...

    Java内存使用系列一Java对象的内存占用Java开发J

    Java开发人员需要理解内存分配、垃圾回收机制以及如何避免内存泄漏,以确保程序的高效运行。 首先,我们来谈谈Java对象的内存结构。每个Java对象都由三部分组成:对象头、实例数据和对齐填充。对象头包含指向类元...

    oracle内存资源分配

    Data Dictionary Cache保存了数据库的元数据,如表结构、索引信息等。Large Pool主要用于RMAN备份、流复制和SQL*Net等服务。Shared Pool包含PL/SQL编译后的代码、SQL语句解析信息以及库缓存。Java Pool则为使用...

    java内存机制与启动参数优化

    java内存机制与启动参数优化 Java 内存机制是指 Java 虚拟机(JVM)管理内存的机制。JVM 主要管理两种类型的内存:堆(Heap)和非堆(Perm)。堆是 Java 代码使用的内存,留给开发人员使用的;非堆是 JVM 留给自己...

    Java内存分配

    Java内存分配是理解Java程序运行效率和资源管理的关键概念。Java内存主要分为以下几个区域: 1. **寄存器**:这是计算机硬件的一部分,用于存储计算过程中的临时数据,程序员无法直接控制。 2. **栈(Stack)**:...

Global site tag (gtag.js) - Google Analytics