3、JAVA的StringTable笔记

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

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

3、JAVA的StringTable笔记_第1张图片

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

你可能感兴趣的:(java,开发语言,jvm,串池)