3

IBM JVM 1.6でこの NPE を取得しています。

java.lang. java.util.concurrent.ConcurrentLinkedQueue.first( ConcurrentLinkedQueue .java: 274 ) の java.util.concurrent.ConcurrentLinkedQueue.size(ConcurrentLinkedQueue.java:315) でのNullPointerException 。. .

関連するソースは、行番号 274 が null の「head」メンバーをスローすることを示しています。使用法を検索すると、このメンバーは必要に応じて新しい node() に設定されますが、無効化されることはありません。

それはどうしてですか?私は何が欠けていますか?

...デバッグモードではこれを再現できません。このキューは、複数のスレッドからアクセスされます。

スニペット (行番号を少し変更するコメントを除いて、Sun と IBM のソースは同じです):

     Node<E> first() {
                for (;;) {
                    Node<E> h = head;
                    Node<E> t = tail;
                    Node<E> first = h.getNext(); // line #274 on IBM, #263 on Sun
...
    }
    }
4

2 に答える 2

1

そのようなエラーは、多くの場合、難解な最適化を誤った JIT コンパイラーから発生します。

あなたにできることはほとんどありません。IBM でエラーをログに記録すると、問題をデバッグするのに十分な情報を収集する方法を案内してくれます。

注: 過去数年間に、このような問題を 2 件提出しました。そのため、IBM が VM に費やす膨大なテスト作業を考慮しても、それほど珍しいことではありません。

于 2013-04-29T08:07:14.153 に答える