InfoQ 文章 Hunting Java Concurrency Bugs
http://www.infoq.com/articles/Hunting-Concurrency-Bugs-1
这篇文章很值得一读。
主要讨论了openJDK(注意文中没有说明Oracle JDK也有相同问题)自身存在的问题,以及分析问题的艰辛过程。
第一个问题是1.7.0_40 之前存在的多线程下造成livelock,jstack无响应。
第二个问题是HashMap的OOM,多线程下操作引起循环指针在序列化的情况下出现OOM。
这个问题出现后还好有个10G 的heapdump,文件太大不能工具直接分析,直接看文件分析可能是循环指针序列化造成的,尝试使用ObjectInputStream读出,但是由于其本机没有生产环境所有的类(造业),此路不通,最后通过unix的strings工具获得反序列化的字符串,得知是个hashmap。
他们在本机尝试多线程操作hashmap引起崩溃,重现了问题。最后将hashmap改为java.util.concurrent.ConcurrentHashMap解决问题。
评论中提到JCStress
http://www.oschina.net/translate/concurrency-torture-testing-your-code-within-the-java-memory-model