`
newleague
  • 浏览: 1504705 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

java中变量在内存中的分配

阅读更多

 

1、类变量(static修饰的变量):在程序加载时系统就为它在堆中开辟了内存,堆中的内存地址存放于栈以便于高速访问。静态变量的生命周期--一直持续到整个"系统"关闭

2、实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量(比如说类实例),然后根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的"物理位置"。 实例变量的生命周期--当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存

3、局部变量:局部变量,由声明在某方法,或某代码段里(比如for循环),执行到它的时候在栈中开辟内存,当局部变量一但脱离作用域,内存立即释放

附:java的内存机制

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

分享到:
评论

相关推荐

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

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

    java中内存分配

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

    java程序中的内存分配问题

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

    java实现内存动态分配

    这些区域在Java内存模型中同样占有重要地位,但在“java实现内存动态分配”的上下文中,主要关注堆和栈的动态分配。 综上所述,Java实现内存动态分配涉及到对堆内存、栈内存的理解,以及对垃圾回收机制的掌握。通过...

    java内存分配情况

    Java内存分配主要涉及五个区域:寄存器、栈、堆、静态域和常量池。在Java编程中,理解这些内存区域的分配规则对于优化代码性能和避免内存泄漏至关重要。 1. **寄存器**:这是最快捷的存储区域,但不在Java程序员的...

    java内存分配详解

    接下来我们重点分析Java中字符串的不同声明方式及其内存分配情况: 1. **Strings1;** - **描述**:声明了一个`String`类型的变量`Strings1`,但没有进行初始化,也没有存储任何对象。对于成员变量,由于Java的...

    Java内存分配浅析

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

    Java中的基本类型和引用类型变量的区别

    Java 中的基本类型和引用类型变量是两个不同的概念,它们在内存分配、变量赋值和函数传递等方面有着本质的区别。 基本类型是 Java 中的八种基本类型,包括 byte、short、int、long、float、double、char 和 boolean...

    java实现的内存分配

    在Java中,虽然JVM并不直接支持轮转法进行内存分配,但可以通过模拟实现。例如,我们可以创建一个固定大小的内存池,然后按照预定义的顺序分配和回收内存块。当一个请求到来时,分配下一个可用的内存块,一旦所有块...

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

    Java内存分配原理是Java编程中的重要一环,它关乎到程序的性能、稳定性和资源管理。深入理解这一主题,能够帮助开发者编写出更高效、更稳定的代码。在Java中,内存分为堆内存、栈内存、方法区(在Java 8之后被元空间...

    java核心 内存分配问题

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

    java中jvm内存分配相关资料总结整理

    本资料总结主要关注JVM内存分配及其运行原理,这对于理解和优化Java应用程序的性能至关重要。 1. **JVM内存结构** JVM内存分为几个关键区域:方法区(Method Area)、堆(Heap)、栈(Stack)、程序计数器(PC ...

    java内存分配机制详解

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

    java 使用静态成员变量计算内存中实例化的对象数目

    在Java编程语言中,了解如何计算内存中实例化对象的数量是一项重要的技能,这对于优化程序性能、理解和管理资源分配至关重要。本篇文章将详细讲解如何利用静态成员变量来追踪和计算一个类在运行时创建的实例数量。 ...

    java中方法重载内存分析

    总结,Java中的方法重载是通过不同的参数列表来区分不同的方法,而内存分配则是在栈和堆之间进行。理解这个过程对于深入学习Java的内存管理和多态性机制至关重要。在实际编程中,合理利用方法重载可以提高代码的...

    Java中变量内存分配机制

    在本文中,简单的为大家介绍有关,java中变量在内存是如何分配的。  在任何编程语言中,无论是基本类型还是引用类型,不论其作用域如何,都必须为其分配一定的内存空间,Java 语言也不例外,Java 的数据类型可以...

    Java内存分配原理精讲

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

    java内存对象分配过程研究

    本文将基于Java虚拟机(JVM)的内存模型,详细探讨对象在Java中的内存分配过程。 #### 二、Java虚拟机内存区域 Java虚拟机(JVM)是Java程序运行的基础平台,其内部有一套完整的内存管理机制。根据JVM规范,JVM的内存...

Global site tag (gtag.js) - Google Analytics