JDK8u20字符串去重

  • 优点:节省大量内存
  • 缺点:略微多占用cpu时间,新生代回收时间略微增加

-XX:+UseStringDeduplication

String s1 = new String("hello");//char[] {'h','e','l','l','o'}
String s2 = new String("hello");//char[] {'h','e','l','l','o'}
  • 将所有新分配的字符串放入一个队列
  • 当新生代回收时,G1并发检查是否有字符串重复
  • 如果它们值一样,让它们引用同一个char[]
  • 注意,与String.intern()不一样
    • String.intern()关注的是字符串对象
    • 而字符串去重关注的是char[]
    • 在JVM内部,使用了不同的字符串表

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/jdk8u20%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%8e%bb%e9%87%8d/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年1月15日
下一篇 2020年1月16日

相关推荐

  • ConcurrentHashMap源码分析

    ConcurrentHashMap的源码比较难读,特别是JDK8中几乎对其进行了重写,设计思想非常优秀,代码量也是非常多,不过我这里算是总结了一些相对重要的部分,仅供参考。 线程安…

    2020年2月13日
    0170
  • MySQL之查询缓存优化

    开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存。 查询缓存配置 查看当…

    2020年3月6日
    0160
  • 深入理解java虚拟机第三版读书笔记08

    以下是第七章 虚拟机类加载机制的内容 概述 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,…

    2020年1月22日
    0300
  • 数据库技术之分库分表

    推荐阅读: MySQL之分区表介绍 区别于分区的是,分区一般都是放在单机里的,用的比较多的是时间范围分区,方便归档。只不过分库分表需要代码实现,分区则是mysql内部实现。分库分表…

    2020年3月25日
    0360
  • PriorityQueue源码分析

    总结 总结放前面防止太长不看: PriorityQueue是个最小堆,如果要改变排序顺序只能重写比较器传入构造方法。 内部元素要么实现Comparable接口,要么传入比较器进行比…

    Java 2020年2月10日
    0260
  • 深入理解java虚拟机第三版读书笔记03

    续深入理解java虚拟机第三版读书笔记02 HotSpot虚拟机对象探秘 对象的创建 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一…

    2020年1月6日
    0150
  • 为什么说Java只有值传递?

    先说一下。。以后可能不会怎么写Java相关的博客了,因为找到了字节跳动的实习工作,用Go/Python开发后端,所以这几天在抓紧时间学Go,在学Go的时候,了解到Go语言只有值传递…

    Java 2020年6月26日
    03170
  • 数据库理论之查询处理和查询优化

    关系数据库的查询处理和查询优化 查询处理 查询处理是 是 RDBMS 执行查询语句的过程,其任务是把用户提交给 RDBMS 的查询语句转换为高效的查询执行计划。 查询处理步骤 查询…

    2020年2月22日
    01960
  • NIO网络编程之Selector介绍

    Selector 要实现异步IO要通过Selector,甚至我们可以通过一个线程管理多个Channel的读写,这是NIO相较BIO的优越之处之一。 Channel可以注册到一个Se…

    Java 2020年2月7日
    0790
  • 深入理解java虚拟机第三版读书笔记11

    以下是第十一章 后端编译与优化的内容 把Class文件转换成与本地基础设施(硬件指令集、操作系统)相关的二进制机器码可以视为整个编译过程的后端。 最近几年提前编译也开始兴起,我们在…

    2020年1月27日
    0300

发表回复

登录后才能评论