我正在研究 String.intern() ,这种方法有性能损失。我将 String.intern() 与 ConcurrentHashMap.putIfAbsent(s,s) 与 Microbenchmark 进行了比较。使用Java1.8.0_212,Ubuntu 18.04.2 LTS
\n\n@Param({"1", "100", "10000", "1000000"})\nprivate int size;\n\nprivate StringIntern stringIntern;\nprivate ConcurrentHashMapIntern concurrentHashMapIntern;\n\n@Setup\npublic void setup(){\n stringIntern = new StringIntern();\n concurrentHashMapIntern = new ConcurrentHashMapIntern();\n}\npublic static class StringIntern{\n public String intern(String s){\n return s.intern();\n }\n}\npublic static class ConcurrentHashMapIntern{\n private final Map<String, String> map;\n\n public ConcurrentHashMapIntern(){\n map= new ConcurrentHashMap<>();\n }\n public String intern(String s){\n String existString = map.putIfAbsent(s, s);\n return (existString == null) ? s : existString;\n }\n}\n\n@Benchmark\npublic void intern(Blackhole blackhole){\n for(int count =0; …Run Code Online (Sandbox Code Playgroud)