当前位置:网站首页>Class constant pool and runtime constant pool
Class constant pool and runtime constant pool
2022-07-07 03:58:00 【The season when the monsoon dies】
class Constant pool
java The file is being compiled into class After the document , stay class A constant pool will be generated in the file , The literal amount used to store code 、 Symbol reference , Such as static、void、public wait . This constant pool is called class Constant pool . use javap The command generates a readable JVM Bytecode instruction file :
javap -v ScheduledBlockChainTask.class
The red box indicates class Constant pool information , There are two main types of constants in the constant pool : Literal and symbolic references .
int a = 1;
int b = 2;
int c = "abcdefg";
int d = "abcdefg- Fully qualified names of classes and interfaces
- Name and descriptor of the field
- The name and descriptor of the method
- Create a string constant pool for Strings , Similar to the cache
- When creating a string constant , First, query whether the string constant pool exists
- The string exists , Return reference instance , non-existent , Instantiate the string and put it in the pool
- Jdk1.6 And before : There is a permanent generation , The runtime constant pool is in the permanent generation , Runtime constant pool contains string constant pool
- Jdk1.7: There is a permanent generation , But gradually “ To the eternal generation ”, The string constant pool is separated from the runtime constant pool in the permanent generation into the heap
- Jdk1.8 And after : There is no permanent generation , Runtime constant pool in meta space , The string constant pool is still in the heap
Three string operations
- Assign strings directly
String s = "lamu"; // s Point to references in the constant pool - new String();
String s1 = new String("zhuge"); // s1 Point to an object reference in memory - intern Method
String s1 = new String("zhuge");
String s2 = s1.intern();
System.out.println(s1 == s2); //falseintern Method returns the reference of the object in the string constant pool . stay jdk6 And below , If the object exists in the string constant pool , Returns the reference of the object in the string constant pool . without , Then add the object to the string constant pool , Returns the reference of this object in the string constant pool . stay jdk6 In the previous version , If the object exists in the string constant pool , Returns the reference of the object in the string constant pool . without , Then check whether the object exists in the heap , If there is , Put the reference of this object in the heap into the string constant pool and return .
String Splicer “+” What will the bottom do
If at compile time , It can determine the value of objects before and after splicing , Then it will be spliced directly in the compilation stage , Put the final value into the string constant pool . If you can't know the value of the object before and after splicing at the compilation stage , Then an object will be created in the heap and string constant pool by splicing the front and rear field values at run time .
String s1 = new String("he") + new String("llo");
String s2 = s1.intern();
System.out.println(s1 == s2);
// stay JDK 1.6 Lower output yes false, Created 6 Objects
// stay JDK 1.7 And above version output is true, Created 5 Objects
// Of course, we didn't consider GC, But these objects do exist or exist
// Be careful : Whether the constant pool has a corresponding object depends on the literal , Objects with non-existent literals will not appear in the constant pool
String s0="hello";
String s1="hello";
String s2="he" + "llo";
System.out.println( s0==s1 ); //true
System.out.println( s0==s2 ); //true s2 It will be optimized to "hello".
String s0="hello";
String s1=new String("hello");
String s2="he" + new String("llo");
System.out.println( s0==s1 ); // false s0 In the constant pool ,s1 In the heap
System.out.println( s0==s2 ); // false new String("llo") Cannot optimize at compile time , therefore s2 Finally, it is generated in the heap
System.out.println( s1==s2 ); // false s1 and s2 It's all in the pile , But they are new Two different objects come out
String a = "ab";
String bb = "b";
String b = "a" + bb;
System.out.println(a == b); // false Variable bb Unknown at compile time , Can't optimize
String a = "ab";
final String bb = "b";
String b = "a" + bb;
System.out.println(a == b); // true bb use final modification , The compile time is known ,b It can be optimized to "ab"
String a = "ab";
final String bb = getBB();
String b = "a" + bb;
System.out.println(a == b); // false Method is used final modification , It also needs to generate dynamic link execution code at runtime , Therefore, the compilation time is unknown , Can't optimize
private static String getBB() {
return "b";
}
String str2 = new StringBuilder(" Computer ").append(" technology ").toString();
System.out.println(str2 == str2.intern()); //true
// str2 Equal to the objects in the heap " Computer technology ", Because there is no literal " Computer technology ", So this object does not exist in the constant pool .
// str2.intern() The reference to the heap object in the returned string constant pool , So it's the same object
String str1 = new StringBuilder("ja").append("va").toString();
System.out.println(str1 == str1.intern()); //false
// java Is the key word , stay JVM The initialized related classes are put into the string constant pool .
String s1=new String("test");
System.out.println(s1==s1.intern()); //false
// new The object that comes out already exists in the constant pool ,s1.intern() Returns an object from a constant pool .
//5 Plastic packaging Byte,Short,Integer,Long,Character The object of ,
// When the value is less than 127 You can use the object pool
Integer i1 = 127; // The underlying layer of this call is actually executed Integer.valueOf(127), It uses IntegerCache Object pool
Integer i2 = 127;
System.out.println(i1 == i2);// Output true
// Greater than 127 when , No objects are taken from the object pool
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);// Output false
// use new Keywords newly generated objects do not use object pools
Integer i5 = new Integer(127);
Integer i6 = new Integer(127);
Integer i7 = 127;
System.out.println(i5 == i6);// Output false
System.out.println(i5 == i7);// Output false
//Boolean Class also implements object pooling Technology
Boolean bool1 = true;
Boolean bool2 = true;
System.out.println(bool1 == bool2);// Output true
// Floating point wrapper classes don't implement object pooling
Double d1 = 1.0;
Double d2 = 1.0;
System.out.println(d1 == d2);// Output false边栏推荐
- 本机mysql
- Index of MySQL
- SSL certificate deployment
- SQL injection -day15
- How to detect whether the MySQL code runs deadlock +binlog view
- ERROR: Could not build wheels for pycocotools which use PEP 517 and cannot be installed directly
- API data interface of A-share index component data
- Clock in during winter vacation
- SSL证书部署
- 1.19.11.SQL客户端、启动SQL客户端、执行SQL查询、环境配置文件、重启策略、自定义函数(User-defined Functions)、构造函数参数
猜你喜欢

VHDL implementation of arbitrary size matrix addition operation

It's too convenient. You can complete the code release and approval by nailing it!

qt-线程等01概念

浅谈网络安全之文件上传

Implementation of map and set

运算放大器应用汇总1

1200.Minimum Absolute Difference

Confirm the future development route! Digital economy, digital transformation, data This meeting is very important

Flutter3.0, the applet is not only run across mobile applications

Mysql-数据丢失,分析binlog日志文件
随机推荐
我的勇敢对线之路--详细阐述,浏览器输入URL发生了什么
A 股指数成分数据 API 数据接口
Preprocessing - interpolation
21. (article ArcGIS API for JS) ArcGIS API for JS rectangular acquisition (sketchviewmodel)
Hisilicon 3559 universal platform construction: RTSP real-time playback support
SQL injection -day15
Codeworks 5 questions per day (1700 average) - day 7
[MySQL] row sorting in MySQL
Ggplot facet detail adjustment summary
25. (ArcGIS API for JS) ArcGIS API for JS line modification line editing (sketchviewmodel)
概率论公式
How to customize the shortcut key for latex to stop running
NoSQL之Redis配置与优化
Set static IP for raspberry pie
List interview common questions
1200.Minimum Absolute Difference
Docker部署Mysql8的实现步骤
Machine learning notes - bird species classification using machine learning
About Confidence Intervals
海思万能平台搭建:颜色空间转换YUV2RGB