首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

integer常量在哪_java 常量

目录 常量 Integer a= 127 与 Integer b = 127相等吗 ---- 常量 java中存在字符串常量,维护了所有String对象 使用String s=”zx”的时候是使用...String.valueOf(“zx”)从常量池中找了个对象返回 如果不存在则将内容放入常量池中 在使用new的时候是直接创建一个新的对象在堆中 Integer中也有常量 其中缓存了-128到127之间的数字...如果整型字面量的值在-128 到 127 之间,那么自动装箱时不会 new 新的Integer 对象,而是直接引用Integer常量池中的 Integer 对象,超过范围 a1==b1...System.out.println(b == c); // true //如果整型字面量的值在-128到127之间, //那么自动装箱时不会new 新的Integer 对象, //而是直接引用常量池中的

87120

Java常量(静态常量与运行时常量

今天说一说Java常量(静态常量与运行时常量)[通俗易懂],希望能够帮助大家进步!!! 1、什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变!...final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量Java中的常量,实际上分为两种形态:静态常量和运行时常量。...常量主要用于存放两大类常量:字面量(Literal)和符号引用量(SymbolicReferences),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念...,包括了如下三种类型的常量: 类和接口的全限定名; 字段名称和描述符; 方法名称和描述符 Java中八种基本类型的包装类的大部分都实现了常量技术,它们是Byte、Short...运行时常量相对于CLass文件常量的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量的内容才能进入方法区运行时常量,运行期间也可能将新的常量放入池中

2.1K21
您找到你想要的搜索结果了吗?
是的
没有找到

jvm字符串常量_java 常量

常量 class常量 Java源文件编译之后得到的class文件,其中有项信息就是常量,保存有字面量和符号引用,比如 public class JvmClass1 { final int b=...c=”java”; String d=”abcd”; String e=”java”; String f=new String(“java”); } } 运行时常量 && 字符串常量 class常量被加载到内存后...,形成了运行时常量,Jdk1.7之前位于方法区中,Jdk1.8之后是放在元空间,或者把元空间看做是新的方法区。...运行时常量相对于class常量的一个特点是具有动态性,Java不要求所有常量在编译器产生,可以在运行时产生常量加入常量,例如String类的intern()。...意思是当一个字符串对象调用intern方法,如果池中已经存在值相等(通过String的equal函数比较)的字符串常量,就返回常量池中的常量,也就是堆中对应实例的引用。否则将这个字符串加入常量

50620

java常量在方法区还是堆_JAVA常量

//类的静态 Interned strings //实际字符串,说的就是常量吧 从 JDK7 开始,JDK 开发者们就有消灭永久的打算了。...有部分数据移到永久之外了: Symbols => native memory // 符号引用 >本机内存 Interned strings => Java Heap // Interned string...干掉的是永久,而不是方法区。 卧槽,接口还在,只是实现类变了。...方法区包括类信息、常量、静态变量等,是JVM规范。 方法区是jvm规范里面的概念。 1.7之前方法区的实现就是永久。 1.7 把常量和静态变量放入了堆中,也就是方法区由永久和堆实现。...1.8 把永久删除使用元空间,也就是方法区由元空间(类信息)和堆实现(常量、静态变量)。

2.8K20

触摸Java常量

java常量是一个经久不衰的话题,也是面试官的最爱,题目花样百出,这次好好总结一下。 理论 先拙劣的表达一下jvm虚拟内存分布: ?...虚拟机栈是jvm执行java代码所使用的栈。 方法区存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置。 虚拟机堆是jvm执行java代码所使用的堆。...Java中的常量,实际上分为两种形态:静态常量和运行时常量。...而运行时常量,则是jvm虚拟机在完成类装载操作后,将class文件中的常量载入到内存中,并保存在方法区中,我们常说的常量,就是指方法区中的运行时常量。...前文提到过,class文件中存在一个静态常量,这个常量是由编译器生成的,用来存储java源文件中的字面量(本文仅仅关注字面量),假设我们有如下java代码: 1 String s = "hi"; 为了方便起见

1.1K10

Java中的常量【Class常量、运行时常量、字符串常量

常量池内存位置演化 在JDK1.7之前运行时常量逻辑包含字符串常量,存放在方法区,此时HotSpot VM对方法区的实现方式为永久。...在JDK1.7字符串常量和静态变量被从方法区拿到了堆中,运行时常量剩下的还在方法区,也就是HotSpot的永久中。...在JDK1.8HotSpot废除永久的概念,用元空间(Metaspace)代替,这时候字符串常量还在堆中,运行时常量还在方法区,只不过方法区从永久变成了元空间(Metaspace)。...4.关于永久 ⚠️在JDK8以前,许多Java程序员都习惯在HotSpot虚拟机上开发、部署程序,很多人更愿意把方法区称呼为“永久”,或将两者混为一谈。...永久这种设计导致Java应用更容易遇到内存溢出的问题(永久有- XX:MaxPermSize的上限,即使不设置也有默认大小,而J9和JRockit只要没有触碰到进程可用内存的上限,例如32位系统中的

1.5K20

Java Class文件常量

Class文件的存在使得不同语言编写的程序都可以运行在Java虚拟机上,只需要这些语言经过编译器编译后的Class文件符合Java虚拟机定义的规范,Java虚拟机就可以加载执行这些Class文件。...常量 走过了魔数和版本,接下去是Class文件中最关键的部分常量常量由一个计数和具体的常量项来组成,在我们代码中常量数量为0x0013(十进制是19),关于常量的计数有一个比较特殊的地方就是他是从...1开始计数的,也就是说如果我们计数的值是19,实际上是只有18个常量项。...常量池中主要存放两大类常量: 字面量 符号引用 字面量主要指的是文本字符串、声明为final的常量值等 符号引用主要包含三类常量: 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符 Java代码在编译的时候不存在连接时...通过比较javap -verbose常量的项的索引和我们class文件二进制的表示可以发现是一一对应的。

75420

Java当中的常量

Java当中的常量Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区。...我们知道在class文件中,有类的版本信息,字段信息,方法,接口等信息,还有一个就是常量, 这个就是class文件常量了。 class文件常量主要用于存放的是什么呢?...常量是以表的形式存在(表是用来存储字符串值的,不存储符号引用),实际可以分两种,一种为静态常量,另一种为运行时常量,共有11中常量表,常量的每一个常量都代表一张表。...常量: Class文件中存储所有常量Java中说过常量可以分两种形态,静态常量和运行时常量。...运行时常量java虚拟机在完成类加载后的操作,将class文件中的常量加载到内存中,并保证在方法区,我们口中的常量是在方法区中运行的常量,运行时常量具有动态性,在运行期间也能产生新的常量放入池中

32910

java 常量和运行时常量_常量在jvm的哪个部分

前言 一直在《深入理解JVM》对常量只有一个浅薄的了解,之前也遇到过这种题目,今天还是要挑出来进行一次全方位的了解。 常量分类 常量大体可以分为:静态常量,运行时常量。...静态常量 存在于class文件中,比如经常使用的javap -verbose中,常量总是在最前面把?...运行时常量呢,就是在class文件被加载进了内存之后,常量保存在了方法区中,通常说的常量 值的是运行时常量。...包装类的常量技术(缓存) 简单介绍 相信学过java的同学都知道自动装箱和自动拆箱,自动装箱常见的就是valueOf这个方法,自动拆箱就是intValue方法。...,通过实际的例子和绘图来熟悉了下字符串常量和包装类的常量的使用。

35430

class文件常量与运行时常量_java运行时常量

接下来就是说明常量的个数了。代表着常量池中有多少个常量,由于常量池中的常量数量不确定,所以才会有这个数据项。...这里所指的常量JAVA代码中所说的常量有所不同,这里的常量主要包括字面量和符号引用,这两个概念很好理解。 字面量跟JAVA代码中的常量概念类似,如字符串、常量的值等等。...紧接着常量数量之后的便是常量表了。刚刚也说了,每个表都会有一个一个字节的标志位,那么常量数量0x002E之后一个字节便是0x0A,这个就是标志位,十进制是10,查表可知是个方法的符号引用。...11项常量和28项常量,我们这里就通过工具来看了。...找到第11项常量,查看11项常量的表结构,继续使用刚刚那样的寻找方法,一直找到标志位为1的常量项,也就是CONSTANT_Utf8_info的表结构,这样就可以得出我们最开始查看的那个表结构的一些具体信息了

38620

Java字符串常量_字符串常量溢出

Java的内存分配中,总共3种常量Java 常量详解(二)class文件常量Java 常量详解(三)class运行时常量 1.字符串常量(String Constant Pool...) 在JDK1.7之前运行时常量逻辑包含字符串常量存放在方法区, 此时hotspot虚拟机对方法区的实现为永久 在JDK1.7 字符串常量被从方法区拿到了堆中, 这里没有提到运行时常量,也就是说字符串常量被单独拿到堆...,运行时常量剩下的东西还在方法区, 也就是hotspot中的永久 在JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量还在堆, 运行时常量还在方法区..., 只不过方法区的实现从永久变成了元空间(Metaspace) 1.1:字符串常量Java内存区域的哪个位置?...(堆内是可以进行回收的,然后方法区也是能回收的,但是本身区域内存比较少,如果用的字符串常量太多了,也会抛java.lang.OutOfMemoryError:PermGenspace 异常) 1.2:字符串常量是什么

93430

Java8移除永久

Java8移除永久 起因: 最近看深入理解Java虚拟机, 在实战OutOfMemoryError的运行时常量溢出时, 我的Intellij提示如下: Java HotSpot(TM) 64-Bit...MaxPermSize=10M; support was removed in 8.0 原书没有说会出现这个警告, 所以上网详细查下相关资料, 汇总如下 探究 在JDK1.7中, 已经把原本放在永久的字符串常量移出...我们通常使用PermSize和MaxPermSize设置永久的大小, 这个大小就决定了永久的上限, 但是我们不是总是知道应该设置为多大的, 如果使用默认值容易遇到OOM错误....文中说实现目标: 类的元数据, 字符串, 类的静态变量将会从永久移除, 放入Java heap或者native memory....其中建议JVM的实现中将类的元数据放入 native memory, 将字符串和类的静态变量放入java堆中.

97710

Java永久去哪儿了

版权说明 本文为 InfoQ 中文站特供稿件,首发地址为:Java永久去哪儿了。如需转载,请与 InfoQ 中文站联系。...摘要 在JDK8之前,类的元数据和常量都存放在一个与堆内存相邻的数据区,即永久。但是在这种情况下有一个问题,如果类的元数据大小超过了应用的可分配内存,那么就会出现内存溢出问题。...在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量,已确定的符号引用和虚方法表。...备注:在JDK7之前的HotSpot虚拟机中,纳入字符串常量的字符串被存储在永久中,因此导致了一系列的性能问题和内存溢出错误。想要了解这些永久移除这些字符串的信息,请访问这里查看。...并且为永久设置空间大小也是很难确定的,因为这其中有很多影响因素,比如类的总数,常量的大小和方法数量等。 同时,HotSpot虚拟机的每种类型的垃圾回收器都需要特殊处理永久中的元数据。

82820

Java常量理解与总结

常量主要用于存放两大类常量:字面量(Literal)和符号引用量(Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念...运行时常量相对于CLass文件常量的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量的内容才能进入方法区运行时常量,运行期间也可能将新的常量放入池中...二.8种基本类型的包装类和常量 1、java中基本类型的包装类的大部分都实现了常量技术,即Byte,Short,Integer,Long,Character,Boolean; Integer i1...Java中的自动装箱与拆箱 ##三.String类和常量 1、String对象创建方式 String str1 = "abcd"; String str2 = new String("abcd");...4、java.lang.String.intern() 运行时常量相对于CLass文件常量的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量的内容才能进入方法区运行时常量

58121

Java Class文件之常量

上一篇Java Class文件格式详解 讲解了整个Class文件的组成部分,因为篇幅的原因没做太多过细的分析,今天我们重点分析下常量。...上一篇文章讲了常量总共17(上一篇写的是18,修正一下,因为2没有使用)种类型,我们来分析其中最常用的类型。...前面4字节是CA FE BA BE,这是固定的魔幻数; 接下来4字节是版本号:00 00 00 34 ,换成10进制是52,这是JDK8的版本号; 接下来是00 8C ,这个表示常量常量项的个数,一共有...0022,再接下来2字节是004C,表示类名索引是34,描述索引是76,那整个常量的第34和76项是什么呢,可以用Javap看下结果, #1 = Methodref #34.#76...CONSTANT_InterfaceMethodref; 接下来2字节是005C和005D,表示对应的接口名的索引为92,接口方法描述索引为93,因为我们有这么一段代码: pst.addBatch(sql); 92和93索引联合的内容为:java

66720

Jvm常量、运行时常量、字符串常量理解

常量 是.class文件的常量,也可以理解为一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等信息 运行时常量 常量是*.class文件中的,当该类被加载,它的常量信息就会放入运行时常量...,并把里面的符号地址变为真实地址 常量只有类文件在编译的时候才会产生,而且是存储在类文件中的。...而运行时常量是在方法区,而且可在JVM运行期间动态向运行时常量池中写入数据。...可以看出s3和s5都是对#4常量的引用,为true的原因是jvm存在编译期优化的机制,在编译期(javac *.java时)会将可以拼接的字符串常量帮你自动拼接了,由于字符串常量池中已经存在了,因此会让...s3=s6输出true 简单介绍intern方法,可以使用intern方法,主动将串池中还没有的字符串对象放入字符串常量 通过intern方法主动将s4的字符串放入了字符串常量,将这个字符串对象尝试放入串

1.3K30

彻底弄懂java中的常量

这张图中,可以看到,方法区实际上是在一块叫“非堆”的区域包含——可以简单粗略的理解为非堆中包含了永生,而永生中又包含了方法区和字符串常量。 ?...在 JDK6 下,intern()会把首次遇到的字符串实例复制到永久中,返回的也是这个永久中字符串实例的引用;而在JDK1.7开始,intern()方法不再复制字符串实例,String 的 intern...,没找到后将其放入常量并返回,所以此时 str1/str2.intern() 指向的是常量池中的地址,JDK6常量永久,与堆隔离,所以 s1.intern()和s1 的地址当然不同了。...JDK6 常量存在持久,设置了持久大小后,不断while循环必将撑满 Perm 导致内存溢出;JDK7 常量被移动到 Native Heap(Java Heap,HotSpot VM中不区分native...堆和Java堆),所以即使设置了持久大小,也不会对常量产生影响;不断while循环在当前的代码中,所有int的字符串相加还不至于撑满 Heap 区,所以不会出现异常。

90701

Java八种包装类、常量

常量Java常量Java内存管理中的一个重要概念,主要用于存储字符串常量、基本类型包装类常量、类和方法的全限定名等。...Java常量主要有以下几个优势、特点:节省内存空间:通过共享常量池中的对象,可以避免重复创建相同的对象,从而节省内存空间。...这意味着在Java程序中,两个相等的字符串常量或基本类型包装类常量实际上是指向常量池中同一个对象的引用。Java常量主要包括以下几个部分:字符串常量:用于存储字符串字面量。...需要注意的是,Java 7及以后的版本对String常量和Integer常量做了一些优化。...例如,对于String常量,可以通过String类的intern()方法将一个字符串加入到常量池中;对于Integer常量,缓存范围从Java 5的-128到127扩展到了Java 8及以后版本的-

12110

彻底弄懂java中的常量

这张图中,可以看到,方法区实际上是在一块叫“非堆”的区域包含——可以简单粗略的理解为非堆中包含了永生,而永生中又包含了方法区和字符串常量。 ?...在 JDK6 下,intern()会把首次遇到的字符串实例复制到永久中,返回的也是这个永久中字符串实例的引用;而在JDK1.7开始,intern()方法不再复制字符串实例,String 的 intern...,没找到后将其放入常量并返回,所以此时 str1/str2.intern() 指向的是常量池中的地址,JDK6常量永久,与堆隔离,所以 s1.intern()和s1 的地址当然不同了。...JDK6 常量存在持久,设置了持久大小后,不断while循环必将撑满 Perm 导致内存溢出;JDK7 常量被移动到 Native Heap(Java Heap,HotSpot VM中不区分native...堆和Java堆),所以即使设置了持久大小,也不会对常量产生影响;不断while循环在当前的代码中,所有int的字符串相加还不至于撑满 Heap 区,所以不会出现异常。

21.8K118
领券