سؤال

وبلدي جافا UI إنهاء unexpectly وملقاة ملف hs_err_pid. ويقول ملف "وقع الحادث خارج آلة جافا الافتراضية في التعليمات البرمجية الأصلية." 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
هل كانت مفيدة؟

المحلول

وأنا مجرد ضرب أن نفس الأخطاء، انها apppearantly خطأ في Direct3d الجديد تسارعت وظائف Java2d مع 1.6.0_11 ما يحدث مع الآلات مع انخفاض ذاكرة الفيديو. إذا قمت بتشغيل التطبيق الخاص بك مع -Dsun.java2d.d3d = كاذبة ينبغي لها أن تعمل مرة أخرى. علة الشمس تتبع هذا هو ما يلي: http://bugs.sun.com/view_bug . هل؟ bug_id = 6788497

نصائح أخرى

وانطلاقا من:

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.

ولمجرد أن الشيء الوحيد التعليمات البرمجية الأصلية استخدام علم هو JNI / أيا كان لا يعني حادث مثل لك يرتبط به في مكان أو في الوقت المناسب. هناك كل أنواع الدعم الأصلي المستخدمة في صمت في أي JVM / التنفيذ معين، وكنت في وقت واحد تسببت الحصول على حوادث غريبة في النهاية من الفساد الذي حدث قبل ذلك بكثير والتي JVM نفسها.

في حالتي أنا وإيجاد الخلل مثيرة في خيوط من GC المتزامنة على مربع (شلالات) بلدي لامعة جديدة متعددة وحدة المعالجة المركزية، وكان أن ترك كل أنواع القنابل تنتظر الانفجار، وكان لي <م> لا غير JDK رمز الأصلي في تطبيقي على الإطلاق.

عند ثابتة فريق GC الشمس علة الخاصة بهم (وطيب للغاية زودت لي مع اختبار روج خمور VM) تبخرت القضايا بلدي (وأيضا، بعد جولة أو اثنتين، natch).

وRGDS

ودامون

ولقد ضرب انتهاك وصول، وهذا يعني أن بعض التعليمات البرمجية حاول الوصول إلى عنوان انها لم يسمح لهم، وغالبا بسبب ليس هناك أي الذاكرة في عنوان معين. النقاط تتبع مكدس الذاكرة المؤقتة إلى الموقع الذي تعثرت على مدى المشكلة التي قد <م> أو لا يكون مصدر المشكلة. ينسى الناس أحيانا عن هذا عندما نتحدث عن التعليمات البرمجية الأصلية، حتى لو كانوا على علم على خلاف ذلك.

ولقد استعملت JNA، ولكن لم يكن أي مشكلة مع ذلك. إذا كان هناك انتهاك وصول كان خطأي. وهنا بعض النصائح البسيطة.

تأكد من جهازك سليمة جسديا. اختبار الذاكرة الخاصة بك مع Memtest86 + . لا يوجد استخدام الصيد خلل البرمجيات لو انها مشكلة في الجهاز.

وانظر إلى التعليمات البرمجية باستخدام الجيش الشعبي اليوغوسلافي. كن على علم أنه حتى لو كان يدعو في جاوة تبدو غير واضحة، وكنت كتابة التعليمات البرمجية المستوى المنخفض التي يمكن فوضى مع أي شيء. ممكن جدا، والتعليمات البرمجية باستخدام JNA يفعل شيئا خطأ، ويفسد الذاكرة. على سبيل المثال، تأكد من استخدام اصطلاح استدعاء والبيانات المحاذاة الصحيحة. إذا كنت في شك، الحصول على شخص من هو مريح مع C (أو أكثر عمومية، الاشياء مستوى منخفض) لمساعدتك.

ولا يستبعد تماما عوامل أخرى. قد يكون جيدا أن كنت أصاب الخلل JVM أو أي شيء، ولكن كن حذرا كيف يحتمل هذا. إذا سمعت أصوات حوافر الحيوانات، واعتقد الخيول، وليس الحمر الوحشية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top