当前位置:网站首页>StringTable详解 串池 性能调优 字符串拼接
StringTable详解 串池 性能调优 字符串拼接
2022-08-01 20:24:00 【Jing<>】
1.组成:

2.常量池和串池的关系:

常量池最初存在于字节码文件中,当运行时,常量池中的信息会被加载到运行时常量池中, 这时a,b,ab都是常量池中的符号,没有变成java字符串对象,在执行到引用他那一行代码上时,才会把a符号变成对象,同时会准备好一块空间StringTable串池的空间,将生成的对象“a”作为key,在串池中找,没有的话将刚生成的对象a放进串池中。 (注意:每一个字符串对象都是执行到这一句时,才放入串池中,不是事先放的)
StringTable的数据结构是hashtable,长度固定,不能扩容。
3.字符串变量拼接
eg:下面的例子是false

s3在串池中,而s4是拼接的ab,在toString的作用下, 将拼接的数据变成了一个新的字符串,是存在于堆中的,相当于 new String (“ab”)
下面是 toString的源码

eg:下面的例子是true

s5是因为 javac在编译期间的优化,会认为“a”“b"是常量,拼接结果是确定的,结果已经在编译期确定为ab,不会变,所以放入串池。而上一个是变量,值可能在运行时修改,所以要在运行时用SringBuilder拼接。

第6行和第29行都是在常量池中的4号位置找一个值为ab的符号,所以当s3执行时,发现串池中还没这个对象,根据ab符号,创建ab对象,就会放入串池,等执行到s5时,在4号位置找ab符号,所以不会创建新的对象,会直接用串池中的对象。
串池中只存放常量的字符串。
4.StringTable的特性:
1.常量池中的字符串仅是符号,第一次使用才会变成对象
2.利用串池的机制,来避免重复创建字符串对象
3.字符串变量拼接的原理是StringBuilder(jdk1.8)
4.字符串常量拼接的原理是编译期优化
5.可以使用intern方法,主动将串池中还没有的字符串对象放入串池,放的是地址(1.8时如果有就不放入,如果没有就直接放入,不管有没有都直接返回串池中的对象值。1.6时如果有就不放入,如果没有就赋值一个副本放入,不管有没有都直接返回串池中的对象值,)
例子:

如下如果调换位置:x2成功入池,但也同时存在于堆中
1.6版本::

5.StringTable的位置


StringTable垃圾回收:
StringTable也会发生垃圾回收,在内存不是很充足的情况下,会发生垃圾回收。
5.StringTable性能调优
两种考虑:
①主要是调hashtable桶的个数,
桶的个数多一些,运行会快一些。会有更好的hash分布,减少hash冲突
可以用-XX:StringTableSize=桶的个数 来调整

②考虑将字符串对象是否入池 入池之后占用内存会少很多
边栏推荐
- "No title"
- Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
- 【torch】张量乘法:matmul,einsum
- 有用的网站
- Ruijie switch basic configuration
- Addition, Subtraction, Multiplication of Large Integers, Multiplication and Division of Large Integers and Ordinary Integers
- 密码学的基础:X.690和对应的BER CER DER编码
- 卷积神经网络(CNN)mnist数字识别-Tensorflow
- "Torch" tensor multiplication: matmul, einsum
- An implementation of an ordered doubly linked list.
猜你喜欢

KDD2022 | 自监督超图Transformer推荐系统

第59章 ApplicationPart内置依赖注入中间件

The graphic details Eureka's caching mechanism/level 3 cache
![[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear](/img/6d/05233ce5c91a612b6247ea07d7982e.jpg)
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear

因斯布鲁克大学团队量子计算硬件突破了二进制

58:第五章:开发admin管理服务:11:开发【管理员人脸登录,接口】;(未实测)(使用了阿里AI人脸识别)(演示了,使用RestTemplate实现接口调用接口;)

WhatsApp群发实战分享——WhatsApp Business API账号

【Untitled】

【节能学院】数据机房中智能小母线与列头柜方案的对比分析

【七夕特别篇】七夕已至,让爱闪耀
随机推荐
部署zabbix
C语言实现-直接插入排序(带图详解)
洛谷 P2440 木材加工
useful website
Interview assault 70: what is the glue bag and a bag?How to solve?
【多任务优化】DWA、DTP、Gradnorm(CVPR 2019、ECCV 2018、 ICML 2018)
泰德制药董事长郑翔玲荣膺“2022卓越影响力企业家奖” 泰德制药荣获“企业社会责任典范奖”
LTE time domain and frequency domain resources
根据Uniprot ID/PDB ID批处理获取蛋白质.pdb文件
环境变量,进程地址空间
Addition, Subtraction, Multiplication of Large Integers, Multiplication and Division of Large Integers and Ordinary Integers
密码学的基础:X.690和对应的BER CER DER编码
面试官:大量请求 Redis 不存在的数据,从而打倒数据库,有什么方案?
数据可视化
Creo5.0 rough hexagon is how to draw
解除360对默认浏览器的检测与修改
18. Distributed configuration center nacos
Multithreaded producers and consumers
[Multi-task model] Progressive Layered Extraction: A Novel Multi-Task Learning Model for Personalized (RecSys'20)
Get started quickly with MongoDB