JAVA变量的存放位置

JAVA变量(包括常量)可以存放在 栈、堆、方法区三块内存区域,除去方法区的常量池中存放的常量之外主要的变量都存放在栈和堆中。

其中栈中的变量会受线程的影响(线程私有),当线程结束时变量销毁

堆中的变量则是线程共享的,由 gc 处理。

变量的存储位置跟变量的类型和变量的作用域有关,如下:

  局部变量  全局变量
基本数据类型 变量名和值都存放在栈中 变量名和值都存在在堆中
引用数据类型 变量名存放在栈中,值存放在堆中

原文地址:https://www.cnblogs.com/guofz/p/9324832.html

时间: 2024-10-16 03:33:05

JAVA变量的存放位置的相关文章

const、static变量存放位置

我们将以下面的例子介绍const变量和static变量的存放位置: static int val_a = 1; // 初始化的静态变量 int val_b = 2;        // 全局变量 const int val_c = 3;  // const 全局变量 static int val_d;     // 未初始化的静态变量 int val_e;            // 未初始化的全局变量 int main() { static int val_f = 5;  // 初始化的局部静

java类中各成分的加载顺序跟内存中的存放位置-----转载

1 参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 2 3 一.什么时候会加载类? 4 使用到类中的内容时加载:有三种情况 5 1.创建对象:new StaticCode(); 6 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show(); 7 3.在命令行中运行:java StaticCodeDemo 8 9 二.类所有内容加载顺序和内存中的存放位置: 10 利用语句进行分析. 11

Java 类中各成分加载顺序 和 内存中的存放位置

参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new StaticCode();2.使用类中的静态成员:StaticCode.num=9;  StaticCode.show();3.在命令行中运行:java StaticCodeDemo 二.类所有内容加载顺序和内存中的存放位置:利用语句进行分析.1.Person p=new Person("zhang

Java变量以及内存分配

Java变量以及内存分配(非常重要) 堆栈 静态存储区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的

Java 变量和常量

变量和常量 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量. 在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表. 变量 变量代表程序的状态.程序通过改变变量的值来改变整个程序的状态,或者说得更大一些,也就是实现程序的功能逻辑.    为了方便的引用变量的值,在程序中需要为变量设定一个名称,这就是变量名.例如在2D游戏程序中,需要代表人物的位置

java——变量分类

java中变量的分类可以按照两种不同的方向进行分类:按被声明的位置划分.按照所属的数据类划分.下面就具体解析一下这两种分类. 按被声明的位置划分 局部变量:方法和语句块内定义的的变量. 在定义局部变量时,必须对其进行初始化. 成员变量:方法外部,类的内部定义的变量. 成员变量可以是java语言中任何一种数据类型(包括基本类型和引用类型) 在定义成员变量时对其进行初始化,如果不进行初始化,java使用默认值对其进行初始化. 按所属的数据类型划分 基本数据类型 内存分析.例如'int i=0;',在

Java变量及基本数据类型

1.Java变量 1.1 变量的概念 内存中的一块存储区域: 该区域有自己的名称(变量名)和类型(数据类型): 该区域的数据可以在同一类型范围内不断变化: 1.1.1 为什么需要定义变量 用来不断的存放同一类型的常量,并可以重复使用: 1.1.2 定义变量的格式 数据类型  变量名  = 初始化值: 1.1.3 变量使用范围 变量的作用范围(一对{}之间有效,"就近原则"); 1.2 变量的使用 1)声明 int a ;  //表示声明一个整型变量,名为a: int b,c,d;  /

JAVA变量存储

1.java变量存储域 java变量的存储区域主要放在以下几个地方: (1)寄存器:可以说是最快的存储区,在C/C++中可以声明寄存器变量,但是在java中不能声明寄存器变量,只是编译器在编译时确定. (2)栈:存放关于基本类型数据和对象的引用,但是对象本身并不在栈里,(通过new出来的)对象放在堆里或者常量池中(字符串的常量对象就放在常量池中). (3)堆:用于存放new出来的对象. (4)常量池:存放字符串常量和基本类型数据的常量(通过 public static final修饰). (5)

关于C++中虚函数表存放位置的思考

其实这是我前一段时间思考过的一个问题,是在看<深入探索C++对象模型>这本书的时候我产生的一个疑问,最近在网上又看到类似的帖子,贴出来看看: 我看到了很多有意思的答案,都回答的比较好,下面贴出一些具有代表性的: Answer 1: Answer 2: 我们都知道,虚函数是多态机制的基础,就是在程序在运行期根据调用的对象来判断具体调用哪个函数,现在我们来说说它的具体实现原理,主要说一下我自己的理解,如果有什么不对的地方请指正在每个包含有虚函数的类的对象的最前面(是指这个对象对象内存布局的最前面,