Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JVM-常量池

JVM-常量池

作者头像
晓果冻
发布于 2022-09-08 05:54:20
发布于 2022-09-08 05:54:20
2980
举报

JVM-常量池

JVM中的常量池通常是对静态常量池字符串常量池运行时常量池的总称

静态常量池 存在于.class文件中,存放类的版本、字段、方法、接口的信息,同时还存放俩大常量:字面量(如字符串、申明为final类型的值)、符号引用,这部分将在类加载后进入方法区的运行时常量池存放。 符号引用包括:类和接口的全限定名、字段名称和描述符、方法名称和描述符 字面量包括:字符串、final修饰的常量、基本数据类型数值、其它 名词解释: 字面量:java代码在编译过程中是无法构建引用的,字面量就是在编译时对于数据的一种表示。int i = 1;//1便是字面量 符号引用:由于在编译过程中并不知道每个类的地址,因为可能这个类还没有加载,所以如果你在一个类中引用了另一个类,那么你完全无法知道他的内存地址,那怎么办,我们只能用他的类名作为符号引用,在类加载完后用这个符号引用去获取他的内存地址。 总结下就是:静态常量池即是存在于.class文件中的的常量池,即编译时期 运行时常量池 JVM在完成类的加载之后,将class文件中的常量池放入方法区(1.8元空间),其中包括静态常量池中的字面量和符号引用。其中符号引用替换成直接引用(就是地址值) 其中8种基本类型的包装类中有6种会存放在常量池种。那就是Byte、Boolean、Short、Integer、Long、Character。Double和Float暂时没有实现,但这6种类型的取值范围也仅限于-128-127

运行时常量池相对于class文件常量池(即静态常量池)的另外一个特性是具备动态性,java语言并不要求常量一定只有编译器才产生,也就是并非预置入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中。例如String的intern()方法。 字符串常量池 静态常量池中的字符串在类加载完成后会存放字符串常量池中,JDK1.7之前,字符串常量池存在于方法区,1.7迁移到堆中。同时迁入到堆的还有静态变量。1.8方法区改朝换代为元空间

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java中的常量池【Class常量池、运行时常量池、字符串常量池】
⚠️全局字符串池里的内容是在类加载完成,经过验证、准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到中;中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的。
高大北
2022/06/14
1.8K0
Java中的常量池【Class常量池、运行时常量池、字符串常量池】
面试题系列第5篇:JDK的运行时常量池、字符串常量池、静态常量池,还傻傻分不清?
【番外篇】本篇核心:JDK各个版本中JDK的运行时常量池、字符串常量池、静态常量池的功能及存储位置。
程序新视界
2020/09/01
6.8K0
面试题系列第5篇:JDK的运行时常量池、字符串常量池、静态常量池,还傻傻分不清?
彻底弄懂java中的常量池
JVM常量池主要分为Class文件常量池、运行时常量池,全局字符串常量池,以及基本类型包装类对象常量池。
用户8062311
2021/01/10
1K0
终于搞懂了Java8的内存结构,再也不纠结方法区和常量池了!
Java虚拟机在执行的时候会把管理的内存分配成不同的区域,这些区域被称为虚拟机内存,同时,对于虚拟机没有直接管理的物理内存,也有一定的利用,这些被利用却不在虚拟机内存数据区的内存,我们称它为本地内存,这两种内存有一定的区别:
JAVA葵花宝典
2021/04/08
8.9K2
终于搞懂了Java8的内存结构,再也不纠结方法区和常量池了!
运行时常量池与字符串常量池_字符串常量池在堆中还是方法区
常量池(Constant Pool),也叫 class 常量池(Class Constant Pool)。
全栈程序员站长
2022/09/19
1.2K0
运行时常量池与字符串常量池_字符串常量池在堆中还是方法区
彻底弄懂java中的常量池
class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,我们编写的java文件就被编译为.class文件格式的二进制数据存放在磁盘中,其中就包括class文件常量池。 class文件中存在常量池(非运行时常量池),其在编译阶段就已经确定,jvm规范对class文件结构有着严格的规范,必须符合此规范的class文件才能被jvm任何和装载。为了方便说明,我们写个简单的类
秃头哥编程
2019/06/24
22.8K13
彻底弄懂java中的常量池
java 常量池和运行时常量池_常量池中的字符串是对象吗
这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN、博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与大家共同探讨:
全栈程序员站长
2022/09/19
5150
Java当中的常量池
在Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区。
达达前端
2022/04/29
3620
Java当中的常量池
Java常量池(静态常量池与运行时常量池)[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Java常量池(静态常量池与运行时常量池)[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/09/23
2.6K0
彻底弄懂字符串常量池等相关问题
  在平时我们使用字符串一般就是拿来直接搞起,很少有深入的去想过这方面的知识,导致别人在考我们的时候,会问 String str = new String("123"); 这个一行代码执行创建了几个对象, String str1= str + new String("456");这行代码中str1存储在内存的哪个位置,堆or 字符串常量区(方法区)? 会把我们问的哑口无言了;哈哈哈哈,其实也不是水平问题,是我们平时可以仔细的去总结该类问题,下面就详细的对这类问题进行总结;
小勇DW3
2018/08/30
6920
JVM常量池
class文件是以字节为单位的二进制数据流,java编译器将java源码文件编译成.class字节码文件存放在磁盘上,.class中就包含文件常量池(非运行时常量池),在编译期间就确定了,.class文件遵循jvm虚拟机规范.
开源日记
2020/11/27
2730
第46节:Java当中的常量池
在Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区。
达达前端
2019/07/03
8440
第46节:Java当中的常量池
什么是字符串常量池_常量池中的字符串是对象吗
JDK1.8-1.9,String底层从char数组变成了byte数组,原因是部分字符仅占一个byte,而堆中含有大量的String字符串,该优化能节省较多空间。
全栈程序员站长
2022/09/19
5440
什么是字符串常量池_常量池中的字符串是对象吗
聊一聊让我蒙蔽一晚上的各种常量池
在写之前我们先来看几个问题,假如你对这些问题已经很懂了的话,那大可不用看这篇文章,如果不大懂的话,那么可以看看我的想法。
帅地
2018/08/30
4090
jvm字符串常量池_java 常量池
字符串对象:比如new String(“abc”),或者直接String s=”str”,后面的”str”也是一个字符串对象。
全栈程序员站长
2022/09/19
5660
jvm字符串常量池_java 常量池
再议String-字符串常量池与String.intern()
来源:blog.csdn.net/gcoder_/article/details/106644312
Java小咖秀
2021/08/05
3630
再议String-字符串常量池与String.intern()
常量池和堆的区别_字符串常量池在堆中还是方法区
目录: 1.常量池与Class常量池 2.运行时常量池 运行时常量池的简介 方法区的Class文件信息,Class常量池和运行时常量池的三者关系 3.字符串常量池 字符串常量池的简介 采用字面值的方式创建字符串对象 采用new关键字新建一个字符串对象 字符串池的优缺点 4.字符串常量池和运行时常量池之间的藕断丝连 常量池和字符串常量池的版本变化 String.intern在JDK6和JDK7之后的区别(重难点) 字符串常量池里存放的是引用还是字面量
全栈程序员站长
2022/09/19
1.3K0
常量池和堆的区别_字符串常量池在堆中还是方法区
Class文件格式与Jvm常量池
class文件中的信息是一项一项排列的, 每项数据都有它的固定长度, 有的占一个字节, 有的占两个字节, 还有的占四个字节或8个字节, 数据项的不同长度分别用u1, u2, u4, u8表示, 分别表示一种数据项在class文件中占据一个字节, 两个字节, 4个字节和8个字节。 可以把u1, u2, u3, u4看做class文件数据项的类型 。
leobhao
2022/06/28
2480
常量池之字符串常量池String.intern()
运行时常量池是方法区(PermGen)的一部分。 需要提前了解: 1. JVM内存模型。 2. JAVA对象在JVM中内存分配 常量池的好处 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 Java的自动装箱中其实就使用到了运行时常量池。详见:Java 自动装箱与拆箱的实现原理 还有字符串常量池。 字符串进入到常量池的两种方法: 1. new String()的实例调用intern()方法。     执行intern()方法时,若常量池中不存在等值的字符串,JVM就会在常
java404
2018/05/18
1.1K0
Class常量池、运行时常量池、字符串常量池的一些思考
java代码经过编译之后都成了xxx.class文件,这是java引以为傲的可移植性的基石。class文件中,在CAFEBABE、主次版本号之后就是常量池入口了,入口是一个u2类型的数据,也就是占据2个字节,用来给常量池的容量计数,假设这个u2的数字为0x0016,那么对应十进制为22,那么常量池中右21个常量,1-21,其中第0个用于表达“不引用任何一个常量”。在这两个字节之后就是编译器为我们生成的常量了,这些常量包含了两大类:字面量和符号引用,通过一个例子看一下:
huofo
2022/03/18
3420
Class常量池、运行时常量池、字符串常量池的一些思考
推荐阅读
相关推荐
Java中的常量池【Class常量池、运行时常量池、字符串常量池】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档