string类型的常量池:
直接使用双引号声明出来的string对象会直接存储在常量池中
如果不是用双引号声明的string对象,可以使用string提供的intern方法。intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。
如果常量池中存在当前字符串,就会直接返回当前字符串,如果常量池中没有此字符串,会将此字符串放入常量池中后,再返回。
intern的不当使用:
常量池的长度是1009且不可变的,因此一旦常量池中的字符串达到一定规模后,性能会急剧下降。
fastjson中对所有的json的key使用了intern方法,缓存到了字符串常量池中,这样每次读取的时候就会非常快,大大减少时间和空间。而且json的key通常都是不变的。但如果变化太大,会给字符常量池带来很大的负担。fastjson修复的办法是在程序中加入了一个最大的缓存大小,超过这个大小后就不会再往字符串常量池中放了。
本文详细介绍了Java中String类型的常量池概念及其工作原理。解释了如何通过双引号声明字符串将其存储在常量池中,并介绍使用intern方法手动加入字符串到常量池的方法。此外,还探讨了fastjson中对JSON key使用intern方法进行优化的实践。
4239

被折叠的 条评论
为什么被折叠?



