向HashMap添加元素会导致java 1.7.0_45中出现ArrayIndexOutofBoundsException

时间:2014-08-07 12:09:22

标签: java hashmap hashset

在我的应用程序中,我有一些代码以最经典的方式将元素放在HasSet中:

@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@XmlElementWrapper
private Set<ParameterDefinition> parameterDefinitions = new HashSet<ParameterDefinition>();

// .... in a method far below ...
    this.parameterDefinitions.add(createParameterDefinitionFor);

此代码已使用两年,并且从未显示出任何失败的迹象。

但是,我们最近将代码库移到了java 7(很高兴)。而且,从那次移动开始,这个精确的指令在我们的Linux机器上使用Suse 10和Java 1.7.0_45仅使用以下堆栈跟踪

  Daemon Thread [p: thread-pool-1; w: 9] (Suspended (exception java.lang.ArrayIndexOutOfBoundsException))   
        java.util.HashMap<K,V>.put(K, V) line: 498  
        java.util.HashSet<E>.add(E) line: 217   

在Windows上运行任何Java 7版本的测试都不会暴露该行为。

所以......有什么理由出现这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:0)

您使用的是Glassfish吗?在这种情况下,很可能就是这个问题:https://java.net/jira/browse/GLASSFISH-20814