`

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

阅读更多
Java把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。

堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用new产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。

这也是 Java 比较占内存的原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!
分享到:
评论

相关推荐

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

    ### Java中堆内存与栈内存分配浅析 #### 一、引言 在Java编程语言中,内存管理是一项至关重要的技术。程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的...

    Java内存分配浅析

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

    Java内存分配全面浅析

    所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。l.寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2.栈:保存局部变量的值,包括:1.用来保存基

    浅析Java语言中对象的创建过程.pdf

    本文详细解析了Java中对象创建的整个流程,涵盖了类信息存储、对象引用、对象实体的内存分配以及实例化过程中方法的调用。 首先,Java的内存结构是理解对象创建的基础。JVM(Java虚拟机)为每一个运行中的Java应用...

    应用源码之防止内存溢出浅析.zip

    1. **Java内存模型**:Java内存分为堆内存和栈内存,对象分配在堆中,局部变量存储在栈上。Android应用基于Dalvik/ART虚拟机,其内存管理机制与标准Java有所不同。 2. **Android内存结构**:Android系统有Dalvik堆...

    安卓Android源码——防止内存溢出浅析.zip

    Android内存分为堆内存和栈内存,Java对象主要存储在堆中,而局部变量和方法信息存储在栈中。内存溢出通常发生在堆内存,当分配给应用的堆内存不足以创建新的对象时,就会发生溢出。 1. **对象生命周期与引用管理**...

    浅析JAVA之垃圾回收机制.doc

    Java对象的内存分配在堆上,而C/C++中的动态内存管理通常涉及栈和堆。在Java中,创建对象时,内存分配由JVM自动完成,而C/C++则需要程序员手动使用`new`或`malloc`等关键字。Java的内存管理更为自动化,但牺牲了对...

    浅析Java引用类型和方法参数传递

    ### 浅析Java引用类型和方法参数传递 #### 一、引言 在Java编程语言中,理解数据类型的处理方式对于编写高效、可维护的代码至关重要。本文将深入探讨Java中的引用类型及其如何影响方法参数的传递机制。通过具体实例...

    浅析java之对象数组.pdf

    "浅析java之对象数组" 本文主要探讨Java中对象数组的知识点,着重介绍基本数据类型数组和对象数组的声明、创建和使用。文章首先介绍了Java的基本概念和特点,然后详细探讨了一维数组的声明和使用,包括基本数据类型...

    Java类加载原理浅析

    Java类加载原理是Java虚拟机(JVM)的重要组成部分,它负责将类的.class文件从磁盘或网络中加载到内存,并转化为运行时的数据结构,以便执行程序代码。本文将深入探讨类加载机制,包括加载、连接、初始化三个主要...

    浅析Java中的 new 关键字

    1. 分配内存:Java虚拟机(JVM)在堆内存中为新对象分配所需的空间。这个过程包括为对象的所有字段分配内存。 2. 初始化:接下来,对对象的成员变量进行默认初始化。例如,基本类型变量会被赋予默认值,引用类型...

    浅析JVM

    ### 浅析JVM:垃圾回收与内存模型 #### 一、JAVA语言及JVM简介 **JAVA语言**是由Sun Microsystems公司(后被Oracle收购)的詹姆斯·高斯林(James Gosling)等人于1995年设计并发布的。JAVA语言是一种通用型、面向...

    浅析Java中的GC垃圾回收器的意义及与GC的交互

    Java中的GC(Garbage Collection)垃圾回收器是Java虚拟机(JVM)的关键特性,它自动管理内存,确保程序在运行过程中不会因为手动管理内存而导致内存泄漏或虚悬引用等问题。GC的主要目标是释放不再被程序引用的对象...

    浅析oracle数据库与BD2数据库

    ### 浅析Oracle数据库与DB2数据库 #### 一、引言 在当前的企业级应用环境中,数据库管理系统(DBMS)扮演着至关重要的角色。Oracle数据库与IBM的DB2数据库作为市场上两大主流的关系型数据库系统,各有其独特的优势...

    浅析JVM逃逸的原理及分析

    JVM 逃逸是 Java 虚拟机(JVM)中的一种优化技术,用于减少 Java 程序中的同步负载和内存堆分配压力。逃逸分析是 JVM 中的一种跨函数全局数据流分析算法,能够分析出一个新的对象的引用的使用范围,从而决定是否要将...

    Android嵌入式系统架构及内核浅析

    - **系统内存管理**:内核负责管理系统的内存资源,包括内存分配、回收以及内存保护机制。内存管理对于保证系统的稳定性和性能至关重要。 ##### 2. 程序库与Android Runtime Android系统中的程序库包括了一系列的...

    基于Linux的Android OS平台应用浅析.pdf

    - **Dalvik虚拟机**:每个Dalvik虚拟机实例运行一个Android应用,线程管理和内存分配由Linux内核负责。Zygote进程是虚拟机的起点,它预先加载和初始化虚拟机实例,当需要新实例时,通过复制自身快速生成。 - **...

Global site tag (gtag.js) - Google Analytics