java中的堆,栈,静态域,常量池

内存分配及变量存储位置(堆、栈、方法区常量池、方法区静态区)(转) 程序运行时,有六个地方都可以保存数据:   1、 寄存器:这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。   2、 堆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)。驻留于常规RAM(随机访问存储器)区域。但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会 阅读详情

Java内存分配主要包括以下几个区域:

  1. 寄存器:我们在程序中无法控制

  2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中

  3. 堆:存放用new产生的数据

  4. 静态域:存放在对象中用static定义的静态成员

  5. 常量池:存放常量

  6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间

Java内存分配中的栈

栈中主要存放两种数据类型:

  1. 在函数中定义的一些基本类型的变量数据,也就是局部变量。
  2. 对象的引用变量。

    当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 (请注意堆和栈的垃圾回收机制)
    栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。
    栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

Java内存分配中的堆

堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态 分配内存,存取速度较慢。
在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。
实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!

Java内存分配中的常量池

常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:

类和接口的全限定名;
字段的名称和描述符;
方法和名称和描述符。

这里需要注意,在java中什么叫做常量。你一定是觉得int a = 1 ;1是常量对吗?生活中可以这么理解,但java中就不是了,1 只是代表一个值,所谓的常量在java中是指final修饰的变量,它们是不可改变的,也就是初始化后就再也无法改变,这样才叫做常量

Java内存分配中的静态域

Java 中被static 修饰的域或方法常被称作静态的。
如果将静态域定义为static ,那么每个类中只有一个这样的域,而每一个对象对于所有的实例域都有自己的一份拷贝本。例如,学生类中有一个实例域studentId和一个静态域nextId, 如下所示:

class Student{  
    private static int nextId = 1;  
    private String studentId;  
    ......  
}  

那么,每一个学生对象,都会有自己的studentId, 但是这个类的所以对象将共享一个nextId域, 换句话说就是: 如果有100个Student类对象 ,那么有100个实例域studentId,每一个student都有自己的一份,但是只有一个静态域nextId , 100个学生对象共享这一个静态域nextId, 使没有学生对象,静态域也是存在的,它是属于类的,而不是属于任何独立的对象。静态域(静态方法)可以直接用类名来调用,而不用创建对象用对象来调用(在绝大多数的面向对象的语言中,静态域被称作为类域。

java的静态域实例域 了解java 静态域和实体域与构造方法的运行先后。 立即下载

相关推荐

java类中静态域、块,非静态域、块,构造函数的初始化顺序

java类中静态域、块,非静态域、块,构造函数的初始化顺序,通过本例子,能够清楚了解到java类的初始化顺序

静态域[详解]

查到的文章统一口径都说静态域是类域,是每个类的唯一的存在,也就是类级别的存在但是和静态变量、静态方法的关系都不讲,你区分开我还是不清楚什么是静态域啊。不知道静态域是什么,所以研究一下。

weixin_45233980的博客 1118

Android 10 根文件系统和编译系统(十):Android.mk编译动态库

配套系列教学视频链接: Android 10.0 AOSP源码编译: 2-AOSP源码开发环境搭建 Android 10.0 根文件系统和编译系统: 3-Android根文件系统和编译系统 说明 系统:AOSP Android10.0 设备:Android模拟器 前言 本文章重点讲解Android.mk如何控制编译源码编译成动态库 ...

ldswfun的专栏 932

Java静态域和静态方法(static)详解

1.静态域 如果将域定义为static,每个类只有一个这样的域。 例如上面这个员工类,每一个员工都有自己的id,但是这个类的所有实例将共享一个nextId域。 也就是说,1000个员工对象,每一个与员工都有自己的id。但是只有一个静态域nextId。 即使没有一个Employee对象,静态域nextId依然存在。 可以理解静态域就是一个类域 2.静态常量 静态变量使用的比较少,但是静态常量使用...

fanc的博客 1527

告别混乱!用Cadence Capture CIS高效管理你的原理图库:以单逻辑器件K9F2G08U0M为例

本文以单逻辑器件K9F2G08U0M为例,详细介绍了如何使用Cadence Capture CIS高效管理原理图库。通过三级分类体系、工程化命名规范和智能检索技术,帮助工程师实现从混乱到有序的转变,提升团队协作效率和设计准确性。

aizhi0169的博客 400

PyQt5混搭qfluentwidgets实战:用FramelessWindow快速打造现代化界面

本文详细介绍了如何将PyQt5与qfluentwidgets组件库结合,利用FramelessWindow快速打造现代化无边框界面。通过环境配置、核心特性解析、组件混用技巧及高级样式定制,帮助开发者提升桌面应用的用户体验和美观度,特别适合需要现代UI设计的Python开发者。

sugar的博客 969

Java中初始化类的静态域静态块等解析

由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。:要先实现对TestOrder类的加载,在加载TestOrder类时,发现类中有静态变量和静态代码块,则先顺序加载静态变量和静态代码块。现在完成了对静态变量和静态代码块的加载,接下来要进行实例域和实例块的加载,对于这二者,与它们在程序中出现的先后顺序有关。如果变量a是实例域,则不会有静态域和在静态块中赋值(不能在静态块中给实例域赋值)的情况,其他同前所述。

2303_77680813的博客 443

奈曼-皮尔逊准则

奈曼-皮尔逊准则 如果各个假设的先验概率P(Hi)(i=0,1)P(H_i)(i=0,1)P(Hi​)(i=0,1)已知,并且每种判决的代价函数已知,这时,可以用贝叶斯准则进行判决。 如果进一步假设正确判决不付出的代价,而错误判决代价相同,即c00=c11=0,c01=c10=1c_{00}=c_{11}=0,c_{01}=c_{10}=1c00​=c11​=0,c01​=c10​=1,这时可以用最小平均错误概率准则进行判决。 在不知道先验概率P(Hi)(i=0,1)P(H_i)(i=0,1)P(Hi​)(

little_soldier的专栏 1万+

【软件构造】静态域与静态方法

该篇文章介绍了静态域、静态常量、静态方法以及静态方法的常见用途之静态工厂方法。

m0_52029107的博客 511

Pytorch中安装 torch_geometric 详细图文操作(全)

如果已经安装了pytorch版本,对应跳过步骤一,直接安装步骤二即可注意:依赖包的配置需要根据pytorch版本号以及cuda的版本号,版本号要适配,否则部分函数无法使用。

码农研究僧的博客 3447

【QT/C++】事件过滤器之基于重写 eventFilter 方法的多种常见应用场景及实现

Qt事件过滤器通过重写eventFilter方法实现多种实用功能:1)鼠标事件处理(点击全选文本、禁用滚轮、悬停提示);2)键盘事件处理(输入内容限制、快捷键提交);3)焦点事件处理(自动弹出下拉框、实时验证);4)绘图事件处理(自定义控件绘制);5)窗口事件处理(防止意外关闭、尺寸限制)。事件过滤器提供非侵入式的事件处理方案,相比传统子类化方式更灵活,通过installEventFilter安装到目标控件即可实现各种交互增强功能。

yuhuasheng1997的博客 1484

Java 静态域和静态方法

main方法都被标记为static修饰符,本文讨论一下该修饰符含义。

qq_42544728的博客 645

Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1174

java static域_java 的栈,堆,静态域,常量池

1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域:存放静态成员(static定义的)5. 常量池:存放字符串常量和基本类型常量(public static final)。6. ...

weixin_35755562的博客 389

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java 的栈,堆,静态域,常量池

java 的栈,堆,静态域,常量池 (2010-04-11 20:58:42) 转载▼ 标签: 杂谈   1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 3. 堆:

fuxiaoyuqing的专栏 602

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java中 堆 栈,常量池等总结

Java中 堆 栈,常量池等概念解析

u010282236的专栏 719

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java堆,栈,常量池简单易懂

本文来自:longxiaoyan 名词解释: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 3. 堆:存放所有new出来的对象。 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基...

hanshimeng的博客 243

constant变量存储位置_内存分配及变量存储位置(堆、栈、方法区常量池、方法区静态区)...

程序运行时,有六个地方都可以保存数据:1、 寄存器:这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。2、 堆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)。驻留于常规RAM(随机访问存储器)...

weixin_39902608的博客 202

堆、栈、常量池

Java语言主要将内部存储划分为以下几个区域: 1.   寄存器:最快的存储区,由编译器根据需求进行分配,我们在程序中无法控制。 2.    栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。 3.   堆:存放所有new出来的对象。 4.   静态域:存放静态成员

qq_39566598的博客 412

java堆,栈,常量池最通俗易懂的图文解释

  寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 栈(stack):存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 堆(heap):存放所有new出来的对象。 静态域:存放静态成员(static定义的) 常量池:存放字符串常量和基本类型常量(public static...

Null的博客 1756

java中的堆、栈和常量池

Java内存分配: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静态域:存放在对象中用static定义的静态成员 5. 常量池:存放常量 6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间 ------------------------------------

我为编程狂 913

常量池、栈、堆的比较

JAVA中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区,位于不同于其他存储区的地方——处理器内部。寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。 2. 栈:存放基本类型的变量数据和对象的引用。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动

no_beginning_no_end的博客 376
上一篇: java接口思想
下一篇: Java字符串的内存分配
the__apollo
博客等级 码龄10年 90粉丝 86原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值