一、JDK版本变化java6和java6之前,常量池是放在方法区中的 Java7,将常量池是存放到了堆中。 Java8之后,取消了整个永久代区域,取而代之的是元空间。运行时常量池和静态常量池存放在元空间中,而字符串常量池依然存放在堆中。二、常量池分类静态常量池:即*.class文件中的常量池 运行时常量池:虚拟机会将各个class文件中的常量池载入到运行时常量池中,即编译期间生成的字面量、符号引用
这里写自定义目录标题前言基本介绍字符串常量池中存储内容String s = new String("abc")与String s = "abc" 前言我们都知道java有很多中常量池,如字节码常量池Constant pool、运行时常量池、字符串常量池String table、Integer等基本数据类型常量池,各自之间很容易混淆,今天我们就来探索一下字符串常量池。基本介绍字符串常量池Strin
转载
2023-11-26 11:48:28
20阅读
Java常量池详解什么是常量池 什么是常量池java开发中,经常会用到字符串,字符串的创建有两种方式:String str = “abc”;String str = new String(“abc”); 这两种方式的创建过程是不同的,java中存量字面量和符号引用的概念,字面量是指由字母、数值组成的字符串或者数值常量。第一种方式的等号右边的"abc"就是一种字面量。符号引用主要包括三类:类和接口
转载
2023-09-01 21:54:12
43阅读
字符串常量池JVM为了减少字符串对象的重复创建,其内部维护了一个特殊的内存,这段内存被成为字符串常量池(方法区中)。实际上还有整型常量池、浮点型常量池等等。字符串常量池存放的是对象的引用,而不是对象。Java中字符串对象创建有两种形式:字面量形式和创建对象形式1、字面量形式字面量的体现形式String str = "Hello",简单理解为去字符串常量池中拿对象的引用当代码中出现字面量形式创建字符
转载
2023-07-18 18:59:10
122阅读
字符串大家一定都不陌生,他是我们非常常用的一个类。String作为一个Java类,可以通过以下两种方式创建一个字符串String str = "zzh";
String str = new String("zzh"); 而第一种是我们比较常用的做法,这种形式叫做"字面量"。在JVM中,为了减少相同的字符串的重复创建,为了达到节省内存的目的。会单独开辟一块内存,用于保存字符串常量,这个内
转载
2023-08-08 12:39:03
70阅读
方法区和运行时常量池溢出:前面提到JDK1.7还是逐步“去永久代”的事情,在此就以测试代码观察一下这件事对程序的实际影响。String.intern()是一个Native方法,它的作用是:如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。在JDK1.6及
1.全局字符串常量池(string pool也有叫做string literal pool)全局字符串池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中(记住:string pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的。)。 在HotSpot VM里实现的string poo
转载
2023-07-28 16:50:37
88阅读
一、字符串常量池字符串大家一定都不陌生,他是我们非常常用的一个类。String作为一个Java类,可以通过以下两种方式创建一个字符串:String str = "Hollis";
String str = new String("Hollis");第一种是我们比较常用的做法,这种形式叫做"字面量"。在JVM中,为了减少相同的字符串的重复创建,为了达到节省内存的目的。会单独开辟一块内存,用于保存字
转载
2023-09-01 10:04:33
134阅读
一、Java基础什么是字符串常量池?Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池;String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引号(”“)创建字串对象。如果池中没有字符串字面量“Cat”,那么首先在池中创建,然后在堆空间中创建,因此将创建总共2个字符串对象。之所以有字符串常量池,是因为String在Java中
转载
2023-07-03 22:21:21
558阅读
# JAVA的字符串常量池是如何GC的
在Java中,字符串常量池是一个特殊的存储区域,用于存储字符串常量。当我们创建一个字符串时,如果该字符串已经存在于常量池中,就会直接返回常量池中的引用。这样可以节省内存空间,也提高了性能。
然而,由于字符串常量池的特殊性,垃圾回收器在处理字符串常量池时会有一些特殊的处理方式。在这篇文章中,我们将会讨论Java中的字符串常量池是如何进行垃圾回收的,并通过一
原创
2024-07-01 06:01:07
165阅读
字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多。JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并
转载
2024-03-04 20:12:32
32阅读
Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式。然而这两种实现其实存在着一些性能和内存占用的差别。这一切都是源于JVM为了减少字符串对象的重复...
原创
2022-11-10 21:53:30
122阅读
Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式。然而这两种实现其实存在着一些性能和内存占用的差别。这一切都是源于JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这
原创
2023-06-08 19:50:19
90阅读
在之前在看jvm虚拟机的书,结果看到常量池的时候,看得一脸懵逼,去网上查也是云里雾里.所以这里自己花几天摸清楚后,在这里做个笔记 因为字符串常量池现在网上争议颇多,官方文档也说得很含糊,以下几点并不是很明确: 比如jdk1.7后的字符串常量池所存储的是否都是引用?还是对象和引用都有? jdk1.7后intern方法将字符串放到常量池,到底是在堆中创建对象,然后放的堆中的对象的引用,还是在直接常量池
1、常量 常量在java中就值的是一般的字面量,比如字符串,整数,浮点数等等数据。简单理解java中什么叫常量2、常量池,也叫静态常量池或者class文件常量池,说常量池一定要指明是编译器产生的。它的组成为字面量和符号引用。 3、运行时常量池。当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,由此可知,运行时常量池也是每个类都有一个。运行时常量池在jdk1.8时,在方法
转载
2023-07-18 18:57:16
487阅读
前言: 在平时我们使用字符串一般就是拿来直接搞起,很少有深入的去想过这方面的知识,导致别人在考我们的时候,会问 String str = new String("123"); 这个一行代码执行创建了几个对象, String str1= str + new String("456");这行代码中str1存储在内存的哪个位置,堆or 字符串常量区(方法区)? 会把我们问的哑口无言了;哈哈哈哈,其实也
转载
2024-07-04 15:27:53
49阅读
P106-105String类-常量池-字符串的比较package hello;public class TestString { public static void main(String[]args) { String str="abc"; String str2=new String("def"); String str3="abc"+"deffgh"; Stri
转载
2024-08-21 10:05:18
30阅读
本人最近正在面试,然后注意到总是有公司喜欢考String的问题,如字符串连接有几种方式,它们之间有什么不同等问题;要不就是给一段代码问创建了几个对象。
转载
2023-05-22 22:22:21
145阅读
字符串常量池在介绍字符串常量池之前,先引入一个知识String str="a";
str="b";
String str2="c";
str2=str2+str;都说String是不可变的,那为什么str可以从"a"变为"b"; 还有将"c"和"b"相加?其实并不是改变值,而是重新开辟了一个"b";首先开辟一个"a",str=“b"后,开辟一个"b”,将str指向"b"String str2=“c
转载
2024-04-09 10:03:58
29阅读
Java字符串常量池是什么?为什么要有这种常量池? 简单介绍Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池。我们知道String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引号(”“)创建字串对象。Java中的字符串常量池下图,清楚地解释了如何在Java堆内存中维护字符串常量池,以及当我们使用不同的方式创建字符串
转载
2023-07-18 19:54:45
67阅读