3、JAVA的StringTable笔记

StringTable(运行时常量池中的串池,底层时hash表)

  1. 常量池中的信息,都会被加载到运行时常量池中
  2. 串池中的对象不是一开始就会创建,而是代码运行到创建对象的行数才会在串池中创建(懒惰加载)
  3. 两个字符串变量拼接:底层都会转换成StringBuilder的append方法
  4. 两个字符串常量拼接:javac在编译期间的优化,结果已经在编译期确定,因此会在串池中搜索是否包含结果,如果存在串池中不会生成新的元素
  5. 常量池中的字符串仅是符号,第一次使用时才变为对象
  6. 利用串池机制,来避免重复创建字符串对象
  7. 可以使用intern方法,主动将串池中还没有的字符串对象放入串池中(1.6会将对象拷贝一份放入串池,1.8不会拷贝直接放入),如果没有放入串池,会把串池中的对象返回

  1. 无用的字符串常量,在占用过大时,也会被回收机制回收
  2. StringTable调优:
    1. 扩大StringTable的Size(-XX:StringTableSize=桶个数),因为底层时hash表,可以牺牲空间换效率
    2. 考虑字符串对象是否入池(hash,如果有大量重复字符串,可以考虑入池来节省空间)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值