Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。
这也是 Java 比较占内存的原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!
分享到:
相关推荐
### Java中堆内存与栈内存分配浅析 #### 一、引言 在Java编程语言中,内存管理是一项至关重要的技术。程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的...
### Java中堆内存和栈内存详解 #### 一、引言 在Java编程语言中,内存管理是一项核心技能。为了更好地理解和使用Java,必须清楚地了解堆内存与栈内存的区别及其工作原理。本文将深入探讨Java中堆内存与栈内存的概念...
Java的内存管理主要涉及堆内存和栈内存,它们是Java虚拟机(JVM)内存模型的重要组成部分。堆内存主要用来存储对象实例,而栈内存则用于存储基本类型和对象引用。 1. **堆内存**: - **创建与回收**:当使用`new`...
Java中栈内存和堆内存详解,非常容易理解
- **内存分配与回收**:当我们在代码中创建一个新的对象时,JVM会在堆内存中为其分配一块内存。当对象不再被引用时,JVM的垃圾回收器(Garbage Collector, GC)会自动回收这部分内存,以便后续对象的创建使用。 - **...
"堆内存和栈内存详解" 堆内存和栈内存是程序运行时的两个主要内存区域,它们在程序的执行过程中扮演着非常重要的角色。栈内存是由编译器自动分配释放的,存放函数的参数值、局部变量的值等,而堆内存则是由程序员...
Java的内存分配策略与其他编程语言有所不同。静态存储分配在编译时就确定了内存需求,适合不需要动态数据结构的简单程序。而栈式分配适用于生命周期短且大小固定的变量,如局部变量。堆式分配则用于需要动态分配和...
Java的内存分配策略与编译原理密切相关。静态存储分配在编译时就确定了存储空间,适用于没有可变数据结构和嵌套/递归结构的场景。栈式分配适用于生命周期短、生存期确定的变量,而堆式分配则适合于需要动态分配和...
- **调整JVM参数**:通过-Xms和-Xmx设置初始和最大堆大小,避免因内存分配不足导致的溢出。例如,可以尝试增大-Xms和-Xmx的值,如`-Xms512M -Xmx1024M`,并使用-Xloggc:gc.log开启GC日志,便于分析内存使用情况。 ...
### 堆内存和栈内存详解 #### 一、预备知识—程序的内存分配 当一个程序被编译并运行时,它所占用的内存会被分成几个不同的区域,每个区域都有其特定的功能和管理方式。以下是对这些内存区域的具体解释: 1. **栈...
### Java内存分配原理精讲 #### 一、引言 Java作为一门广泛应用于企业级开发的语言,其内存管理和分配机制是其核心技术之一。本文旨在深入探讨Java内存分配的基本原理及其在不同内存区域的具体表现,帮助读者更好...
### Java中堆与栈的区别详解 #### 一、概述 在Java编程语言中,了解堆与栈的区别对于理解和管理程序的内存使用至关重要。本文将详细解释Java中的堆和栈的概念,以及它们之间的区别。 #### 二、Java堆 Java堆是...
Tomcat与java web 开发技术详解-孙卫琴-第二版 这是271-540 Tomcat与java web 开发技术详解-孙卫琴-第二版 内容详细,清晰, javaweb必备
本文将详细介绍C/C++程序中的内存分配,特别聚焦于“堆”与“栈”的区别。 ##### 1. 栈区(Stack) - **定义**:由编译器自动分配和释放,用于存储函数的参数值、局部变量的值等。 - **操作方式**:类似于数据结构...
Java SPI 机制详解 Java SPI(Service Provider Interface)机制是一种服务提供发现机制,能够实现框架的扩展和替换组件,主要被框架的开发人员使用。SPI 机制的核心思想是将装配的控制权移到程序之外,在模块化...
### Java中堆和栈的区别详解 #### 一、引言 在Java编程语言中,内存管理是一项非常重要的任务。为了确保程序的高效运行以及资源的有效利用,Java虚拟机(JVM)将内存划分为堆和栈两种类型。这两种内存区域各自承担着...
Java内存模型详解JMM Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)中的一种内存模型,它描述了程序中各个变量之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节...
4. **Java堆**:所有对象实例以及数组都在堆中分配内存。堆是线程共享的区域,垃圾收集器主要负责管理这部分内存。 5. **方法区**(在Java 8后被元空间取代):存储类的元数据,如类名、字段信息、方法信息等。这...
C和C++提供了多种内存分配机制,主要包括静态存储区域分配、栈上分配和堆上分配。静态存储区域分配的内存区域包括全局变量和静态变量,这些变量的生命周期贯穿整个程序执行周期,无需程序员手动管理。然而,静态存储...
Tomcat+java+web+开发技术详解-孙卫琴-第二版.