-XX:+AggressiveOpts -XX:+UseStringDeduplication 加快编译 字符串去重
-XX:StringDeduplicationAgeThreshold
默认情况下,一个字符串对象经过3次GC以后还存活才会被列为去重的候选对象,可以用-XX:StringDeduplicationAgeThreshold来改变经历的GC的次数
-XX:+UseStringDeduplication并不会消除重复字符串的引用本身,它只会替换底层的char[],消除重复字符串对象只需要对value字段进行重新引用赋值即可, 差不多就是这个意思:aString.value = anotherString.value。
任何一个String对象在内存中最少占用24个字节,启用这个参数以后如果有很多短的重复字符串对象的话会大大的节省内存。
(7)-XX:+PrintStringDeduplicationStatistics查看去重信息
如果你想查看字符串去重的一些统计信息,比如说去重花了多长时间、多少重复字符串被去重、节省了多少内存等等,可以传递-XX:+PrintStringDeduplicationStatistics这个参数给JVM,在GC日志中就可以打印出这些信息来。
结论
如果你的应用使用的是G1收集器,并且JDK的版本大于 JDK 8 update 20,那么可以尝试开启-XX:+UseStringDeduplication,如果你的应用中存在大量长时间存活的对象,那结果肯定是很香。但是,如果想用在生产环境中还是需要测试一下才可以。
亲缘性线程池 内部实现 根据key绑定单线程的线程池 底层实现则是多个单线程池组成的 大线程池 应用场景: 线程池无序 但是希望以某一个维度有序 比如 一组数据希望同一个userid下的数据 顺序执行。