2

私のJavaUIが予期せず終了し、hs_err_pidファイルをダンプしました。このファイルには、「クラッシュはネイティブコードのJava仮想マシンの外部で発生しました」と記載されています。JNAは私たちが使用する唯一のネイティブコードです。これを引き起こす可能性のあるJNAバージョンの既知の問題やバグを知っている人はいますか?以下のエラーファイルの内容の一部を含めました。

An unexpected error has been detected by Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d02bcbd, pid=312, tid=3616

 Java VM: Java HotSpot(TM) Client VM (11.0-b16 mixed mode, sharing windows-x86)<br>
 Problematic frame:
 C  [awt.dll+0x2bcbd]

 If you would like to submit a bug report, please visit:
   http://java.sun.com/webapps/bugreport/crash.jsp
 The crash happened outside the Java Virtual Machine in native code.
 See problematic frame for where to report the bug.

Current thread (0x02acf000):  JavaThread "AWT-Windows" daemon [_thread_in_native, id=3616, stack(0x02eb0000,0x02f00000)]

siginfo: ExceptionCode=0xc0000005, writing address 0xe2789280


Registers:
EAX=0x234f099c, EBX=0x00001400, ECX=0x00000100, EDX=0xe2789280
ESP=0x02eff4a4, EBP=0x00000400, ESI=0x234f099c, EDI=0xe2789280
EIP=0x6d02bcbd, EFLAGS=0x00010206

Top of Stack: (sp=0x02eff4a4)
0x02eff4a4:   02eff500 00000100 02eff584 00000100
0x02eff4b4:   6d0a5697 00000400 00000400 00000100
0x02eff4c4:   00000100 02eff700 02eff500 00000000
0x02eff4d4:   00000000 00000100 041ac3a0 00000100
0x02eff4e4:   00182620 00000400 e2789280 00000000
0x02eff4f4:   00000000 00000100 00000100 00000000
0x02eff504:   00000000 00000100 00000100 00000000
0x02eff514:   00000000 00000004 00000400 00000000

Instructions: (pc=0x6d02bcbd)
0x6d02bcad:   00 00 00 8b 4c 24 14 8b e9 c1 e9 02 8b f0 8b fa
0x6d02bcbd:   f3 a5 8b cd 83 e1 03 f3 a4 8b 74 24 18 8b 4c 24

Stack: [0x02eb0000,0x02f00000],  sp=0x02eff4a4,  free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [awt.dll+0x2bcbd]

[error occurred during error reporting (printing native stack), id 0xc0000005]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.awt.windows.WToolkit.eventLoop()V+0
j  sun.awt.windows.WToolkit.run()V+69
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
4

4 に答える 4

3

まったく同じバグに遭遇しました。これは明らかに、ビデオ RAM が少ないマシンで発生する 1.6.0_11 の新しい Direct3d アクセラレーション Java2d 機能のバグです。-Dsun.java2d.d3d=false でアプリを起動すると、再び動作するはずです。これを追跡する Sun のバグは次のとおりです: http://bugs.sun.com/view_bug.do?bug_id=6788497

于 2009-01-21T01:23:38.670 に答える
1

あなたが故意に使用しているネイティブコードのほんの一部がJNIであるという理由だけで、あなたのようなクラッシュが場所や時間に関連しているという意味ではありません。特定のJVM/実行でサイレントに使用されるあらゆる種類のネイティブサポートがあり、私はかつて、はるか以前に発生した破損とJVM自体によって引き起こされる奇妙なクラッシュを経験していました。

私の場合、光沢のある新しいマルチCPU(ナイアガラ)ボックスでの同時GCのスレッド化にエキサイティングなバグが見つかり、あらゆる種類の爆弾が爆発するのを待っていました。アプリにはJDK以外のネイティブコードがありませんでした。まったく。

SunのGCチームがバグを修正したとき(そして非常に親切にテストブートレッグVMを提供してくれたとき)、私の問題は解消されました(まあ、1、2ラウンド後、ナッチ)。

Rgds

デイモン

于 2008-12-29T12:35:23.440 に答える
1

から判断:

Stack: [0x02eb0000,0x02f00000], sp=0x02eff4a4, free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [awt.dll+0x2bcbd]

(その時点でスタック トレースが爆発したようです) AWT ライブラリのバグに遭遇している可能性があります。

于 2008-12-19T00:39:44.567 に答える
0

アクセス違反が発生しました。これは、特定のアドレスにメモリがないために、一部のコードが許可されていないアドレスにアクセスしようとしたことを意味します。スタックトレースは、問題の原因である場合とそうでない場合がある、問題につまずいた場所を指します。ネイティブコードについて話すとき、他の方法でそれを知っていても、人々はこれを忘れることがあります。

JNAを使用したことがありますが、問題はありませんでした。アクセス違反があった場合、それは私のせいでした。ここにいくつかの簡単なアドバイスがあります。

マシンが物理的に健全であることを確認してください。Memtest86+でメモリをテストします。ハードウェアの問題であれば、ソフトウェアのバグを探しても意味がありません。

JNAを使用してコードを見てください。Javaでの呼び出しが目立たないように見えても、何でも混乱する可能性のある低レベルのコードを記述していることに注意してください。可能性としては、JNAを使用するコードが何か問題を起こし、メモリを破壊する可能性があります。たとえば、正しい呼び出し規約とデータアライメントが使用されていることを確認してください。疑わしい場合は、C(またはより一般的な低レベルのもの)に慣れている人に助けを求めてください。

他の要因を完全に排除しないでください。JVMのバグなどに遭遇した可能性がありますが、その可能性に注意してください。鼓動が聞こえたら、シマウマではなく馬を考えてください。

于 2008-12-29T13:39:00.113 に答える