当前位置:网站首页>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=桶的个数 来调整
②考虑将字符串对象是否入池 入池之后占用内存会少很多
边栏推荐
猜你喜欢
【多任务优化】DWA、DTP、Gradnorm(CVPR 2019、ECCV 2018、 ICML 2018)
因斯布鲁克大学团队量子计算硬件突破了二进制
用户身份标识与账号体系实践
【个人作品】无线网络图传模块
我的驾照考试笔记(3)
智能硬件开发怎么做?机智云全套自助式开发工具助力高效开发
【多任务模型】Progressive Layered Extraction: A Novel Multi-Task Learning Model for Personalized(RecSys‘20)
用户体验好的Button,在手机上不应该有Hover态
Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
Zheng Xiangling, Chairman of Tide Pharmaceuticals, won the "2022 Outstanding Influential Entrepreneur Award" Tide Pharmaceuticals won the "Corporate Social Responsibility Model Award"
随机推荐
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
New graduate students, great experience in reading English literature, worthy of your collection
[Energy Conservation Institute] Comparative analysis of smart small busbar and column head cabinet solutions in data room
给定中序遍历和另外一种遍历方法确定一棵二叉树
Convolutional Neural Network (CNN) mnist Digit Recognition - Tensorflow
【节能学院】安科瑞餐饮油烟监测云平台助力大气污染攻坚战
How PROE/Croe edits a completed sketch and brings it back to sketching state
密码学的基础:X.690和对应的BER CER DER编码
用户体验好的Button,在手机上不应该有Hover态
数据可视化
算法---解码方法(Kotlin)
LTE时域、频域资源
如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
瀚高数据导入
58: Chapter 5: Develop admin management services: 11: Develop [admin face login, interface]; (not measured) (using Ali AI face recognition) (demonstrated, using RestTemplate to implement interface cal
Failed to re-init queues : Illegal queue capacity setting (abs-capacity=0.6) > (abs-maximum-capacity
SIPp 安装及使用
不同的操作加不同的锁详解
【七夕特别篇】七夕已至,让爱闪耀
Redis does check-in statistics