码迷,mamicode.com
首页 > 其他好文 > 详细

synchroized String object 时使用guava的interner代替String.intern()

时间:2014-08-01 19:15:22      阅读:1438      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   io   代码   

synchroized代码块, 直接使用String作为lock的时候,不会起作用

此时可已使用String.intern()作为代替,

但String.intern()的缺陷是 如果字符串特别多,导致放入字符串池的String不可控,有可能导致OOM错误或者过多的Full GC

具体参考这里

http://stackoverflow.com/questions/10578984/what-is-string-interning/10579062#10579062

因此使用guava的Interner作为代替

private Interner<String> interner = Interners.<String>newWeakInterner();

public  void test(String str){
    synchronized(interner.intern(str)){
             ...
    };      
}

好处是Note that unlike String.intern(), using this interner does not consume memory in the permanent generation.

synchroized String object 时使用guava的interner代替String.intern(),布布扣,bubuko.com

synchroized String object 时使用guava的interner代替String.intern()

标签:style   blog   http   color   java   使用   io   代码   

原文地址:http://www.cnblogs.com/xmjzblog/p/3885512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!