Java堆、栈和常量池

 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.

  2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)

  3. 堆:存放所有new出来的对象。

  4. 静态域:存放静态成员(static定义的)

  5. 常量池:存放字符串常量和基本类型常量(public static final)。

  6. 非RAM存储:硬盘等永久存储空间

  这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。

  对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

  如以下代码:

  Java代码

  String s1 = "china";

  String s2 = "china";

  String s3 = "china";

  String ss1 = new String("china");

  String ss2 = new String("china");

  String ss3 = new String("china");

  Java堆、栈和常量池 - jontan0121 - Dream In The Forest500)this.width=500;">

  对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。

  如以下代码:

  Java代码

  int i1 = 9;

  int i2 = 9;

  int i3 = 9;

  public static final int INT1 = 9;

  public static final int INT2 = 9;

  public static final int INT3 = 9;

  Java堆、栈和常量池 - jontan0121 - Dream In The Forest500)this.width=500;">

  对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。

形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。

  成员变量存储在堆中的对象里面,由垃圾回收器负责回收。

  如以下代码:

  Java代码

  class BirthDate {

  private int day;

  private int month;

  private int year;

  public BirthDate(int d, int m, int y) {

  day = d;

  month = m;

  year = y;

  }

  省略get,set方法………

  }

  public class Test{

  public static void main(String args[]){

  int date = 9;

  Test test = new Test();

  test.change(date);

  BirthDate d1= new BirthDate(7,7,1970);

  }

  public void change1(int i){

  i = 1234;

  }

  Java堆、栈和常量池 - jontan0121 - Dream In The Forest500)this.width=500;">

  对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化:

  1. main方法开始执行:int date = 9;

  date局部变量,基础类型,引用和值都存在栈中。

  2. Test test = new Test();

  test为对象引用,存在栈中,对象(new Test())存在堆中。

  3. test.change(date);

  i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。

  4. BirthDate d1= new BirthDate(7,7,1970);

   d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中。 day,month,year为成员变量,它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。

  5.main方法执行完之后,date变量,test,d1引用将从栈中消失,new Test(),new BirthDate()将等待垃圾回收。

LeRobot 入门教程(四)SO-101机械臂组装教程 《SO-101机器人组装与配置指南》详细介绍了旗舰机器人SO-101的完整搭建流程。从获取3D打印零件、安装LeRobot软件和FeetechSDK,到分步组装6个关节的机械臂结构(含夹爪/手柄选项),指南提供了清晰的螺丝规格和安装位置说明。重点包括:电机ID/波特率设置方法、USB端口识别技巧、领导者/跟随者臂的校准流程,以及故障排查建议。完成组装后,用户可通过配套Python脚本校准机器人,为后续的自主学习任务做好准备。文档附有视频演示和技术支持通道,确保用户顺利完成机器人部署。 阅读详情

相关推荐

树莓派3-改装wifi外置天线

声明:本文只是技术性探讨,改装引起的产品损坏等后果,由用户自负! 改装主要有两种方法 方法一:直接替换原来的天线 1、移除原有的小陶瓷天线,就在Made in PRC(或UK)那边的那个 清理一下阻焊剂方便天线接地(图中PRC左侧) 2、焊接天线 天线的屏蔽层焊接到清理完阻焊剂的地方,中间的信号线焊接到PRC右侧焊盘。 3、最终的样子

huayucong的博客 2万+

Java 堆、栈、常量池

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

张国鹏的专栏 883

【ECCV 2024】动态范围直方图自注意力DHSA,即插即用!

直方图自注意力机制,将空间特征按强度分段并进行分组,然后在各个分组内或分组间应用自注意力,以选择性地关注具有动态范围的空间特征,并处理长距离内相似退化的像素。

qq_43303160的博客 1844

Java-堆、栈、常量池的区别

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 堆: Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new指令建立,通过垃圾回收器来销毁。 堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。 栈: 栈中主要存放一些基本数据类型的变量(byte、short、int、long、

了解➔熟悉➔掌握➔精通 1484

LMS Virtual.Lab二次开发:声学仿真结果导出方法(VBScript、Python)

Siemens LMS Virtual.Lab 提供一套集成软件平台用以模拟机械系统的品质属性,如结构完整性、振动噪声、耐久性、系统动力学特性、驾驶的平顺性及操纵的稳定性等。

爱看书的小沐 6015

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 319

堆、栈、常量池的理解

本文对java的栈、堆和常量池之间的关系以及存放的内容讲一些个人浅显的理解

qurious7的博客 890

【QT开发】web开发,内嵌网页展示和交互工具QWebEngineView类详解及实战应用

QWebEngineView 类为 Qt 应用提供了强大的网页展示和交互能力。通过合理运用其方法、属性和事件,能够创建出功能丰富、用户体验良好的网页浏览界面。在开发过程中,要注意处理常见问题,以确保网页的正常展示和交互效果。

科技改变人类,技术成就未来 2003

常量池(Constant Pool)和堆(Heap)

堆中的对象由JVM管理,开发人员无需手动管理堆内存的分配和释放。它包含了编译器在编译阶段生成的各种字面量和符号引用,如字符串常量、整数常量、浮点数常量、类和接口的全限定名等。常量池的数据是在编译期间确定的,并且存在于所有类的字节码文件中。需要注意的是,常量池和堆都属于Java虚拟机(JVM)中的内存区域,但它们的作用和管理方式有所不同。常量池的生命周期与类的生命周期相同,而堆中的对象的生命周期由垃圾回收器确定。常量池包含不同类型的常量,而堆存储对象实例和数组等的内存。

weixin_59095717的博客 433

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握

本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求;

getusushu的博客 411

Flink CDC 中 StartupOptions 模式详解

Flink CDC 的 StartupOptions 模式用于指定作业启动时从源数据读取数据的起始位置,不同的模式适用于不同的业务场景,可满足多样化的数据处理需求,主要有 Initial 模式、Earliest 模式、Latest 模式、SpecificOffset 模式和 Timestamp 模式。

RodJohnsonDoctor的专栏 849

举例讲解JAVA中的堆和栈

Java中堆和堆栈的区别     1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 (降低内存或者说是程序方面的内存泄露等问题出现的几率?) 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,

Java海洋 2476

华为OD机试 - 音乐小说内容重复识别 - 并查集(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 159

Java堆、栈、方法区、常量池

Java堆、栈、方法区、常量池

qq_48287999的博客 2770

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java中常量池、堆和栈的区别与联系

堆是对象的 “仓库”,存储所有动态创建的实例;栈是方法执行的 “工作台”,存储局部变量和调用信息,速度快但空间有限;常量池是 “常量缓存区”,存储不变值以复用,减少内存浪费。

2402_84411549的博客 2017

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java堆和栈 常量池_Java中栈、堆和常量池

Java内存分配主要包括以下几个区域:寄存器最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.。栈存放基本类型的变量数据和对象的引用(就是一个名字),对象本身不存放在栈中,而是存放在堆或者常量池中。栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。栈区内存由编译器自动分配释放,具体方法执行结束之后,系统自动释放JVM...

weixin_29973077的博客 1166

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java 堆 栈 方法区 常量池_java栈、堆、常量池、方法区

栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。堆(heap):用于存储对象和数组常量池:常量池的划分Class 文件常量池运行时常量池字符串常量池1. Class 文件常量池Class 文件常量池指的是编译生成的 class ...

weixin_29525745的博客 757

在Java中常量池、堆和栈分别是什么,它们之间的区别和联系

在 Java 或类似的编程语言中,常量池(Constant Pool)、堆(Heap) 和 栈(Stack) 是内存中的三个不同区域,它们承担着不同的职责。下面我们来详细讲解它们的定义、用途、区别和相互关系。常量池是一种特殊的内存区域,用于存储程序运行中使用的各种常量和符号引用。包括两个层次:类文件常量池(Class Constant Pool):编译期间生成,存储在 .class 文件中。

BUG-制造机 797

Java堆、栈和常量池详解

Java堆、栈和常量池详解 1. 栈(stack)与堆(heap)都是Java用来在RAM中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享,详见第3点。         堆的优势是可以动态地分配内存大小,...

fu-jw的博客 3444

Java中的堆、栈和常量池

是内存管理的核心部分,分别用于存储不同类型的数据。

wincl0的博客 448

java中,堆、栈、常量池

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

yuanye_22的博客 236

Java内存分配之堆、栈和常量池

Java内存分配之堆、栈和常量池 Java内存分配主要包括以下几个区域: 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 常量池:存放常量 ***************************************************************** Java内存分配中的栈   在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内...

dongsc1的博客 585

java堆、栈、堆栈,常量池的区别总结

java堆、栈、堆栈,常量池的区别1. 前言2. 系统中的堆、栈 和 数据结构堆、栈2.1 数据结构堆、栈2.2 系统方面的堆和栈3. Java里的堆和栈(系统方面的堆和栈)3.1 常见概念3.2 总结4. 申请响应、申请限制4.1 申请响应4.2 申请限制5. 数据存储 转自知乎,原文链接。我对原回答进行了排版整理。 1. 前言 先说一下栈和堆栈,我们听老一辈的程序员一般都会说堆栈,其实栈就是堆...

TingtingYang 1851

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

Java内存分配主要包括以下几个区域: 寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 静态域:存放在对象中用static定义的静态成员 常量池:存放常量 非RAM(随机存取存储器)存储:硬盘等永久存储空间 Java内存分配中的栈栈中主要存放两种数据类型: 在函数中定义的一些基本类型的变量数据,也就是局部变量。 对

The__Apollo的博客 1818

Java 字符串String 在堆,栈,常量池中

Java 字符串String 在堆,栈,常量池中

分享我的点点滴滴,在成长路上与你同行! 3093

Java的堆、栈和常量池

详细解释了堆和栈在JVM的原理

m0_74228964的博客 1587
上一篇: java内存管理
下一篇: 下载
MyJavaBlog
博客等级 码龄16年 11粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值