ConcurrentHashMap JDK 8 降级到 JDK 6

3

Java 8中的ConcurrentHashMap并不使用锁,尽管在JDK 6和7的实现中会使用锁。是否有将Java 8实现回溯到Java 6的方法?

原因:没有锁 => 没有竞争 => 更好的性能。


1
你的应用程序中的锁是否成为瓶颈? - Thorbjørn Ravn Andersen
是的,如果主要使用2到3个桶,而且有多个作者(几乎实时更新)。 - Artem Oboturov
出于好奇,Java 8和之前的版本分别测量了哪些时间? - Thorbjørn Ravn Andersen
1
你能具体说明你使用了哪些指标来确认无锁Java-8解决方案是适合你的问题的唯一选择吗?请参阅Parallel ParkingParallel Parking b以获取相关讨论。 - OldCurmudgeon
3个回答

2
自2014年4月以来,我们已经将产品迁移到Java8,因此这对我们来说不再是一个紧迫的问题。对于那些仍然有这个问题的人,请查看Doug Lea的jsr166e. 文档, 在Java6下编译的jar包

顺便说一句:现在连Twitter也将这些类的一部分放入了一个在Java6下编译的jar包twitter/jsr166e :)


Twitter链接是类的子集,但链接到jsr166e的完整源代码此处,答案中的链接已损坏。 - Daniel Widdis

1

至少Java 7有后移版,可以参考Infinispan的这个版本,这是他们博客文章的介绍。它应该也能在Java 6上运行,下载infinispan jar并进行测试可能是值得的。


1
抱歉,您好, 很遗憾,这不适用于JDK6,因为ConcurrentMapFactory检查com.sun.unsafe.Unsafe的存在而不是sun.misc.Unsafe。我已经打开了一个JIRA问题:https://issues.jboss.org/browse/ISPN-2237 罗伯特 - Artem Oboturov
整个库是一个单一的JAR文件吗?或者更简单地说,我能否获得并发后移的实质部分? - Artem Oboturov
我不确定这是否是唯一的问题,但似乎值得尝试,将源代码复制到项目中,并使用不同的包名称重新导入。可能只是这个问题。 - Angular University
源代码可以在这里找到:http://grepcode.com/file/repo1.maven.org/maven2/org.infinispan/infinispan-core/5.1.5.FINAL/org/infinispan/util/concurrent/jdk8backported/ConcurrentHashMapV8.java - Joel

0

Netty拥有回溯,Netty的语言级别为Java 6。


请看我的回答。 - Artem Oboturov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接