جافا:كيف يمكنني رؤية أجزاء كود تشغيل أكثر ؟ (التنميط)

StackOverflow https://stackoverflow.com/questions/90176

سؤال

أنا أكتب بسيطة لعبة الداما في جاوة.عندما الماوس فوق مجلس بلدي المعالج سلالم تصل إلى 50% (100% على الأساسي).

أود معرفة أي جزء من التعليمات البرمجية(على افتراض أنه خطئي) المنفذة خلال هذا.

لقد حاولت التصحيح, ولكن الخطوة من خلال التصحيح لا تعمل بشكل جيد جدا في هذه الحالة.

هل هناك أي أداة يمكن أن تقول لي أين مشكلتي الأكاذيب ؟ أنا حاليا باستخدام الكسوف.

هل كانت مفيدة؟

المحلول

وهذا ما يسمى "التنميط".IDE الخاص بك ربما يأتي مع واحدة:انظر مفتوحة المصدر المحللون في جافا.

نصائح أخرى

استخدام منشئ ملفات التعريف (هـ.ز yourkit )

التنميط?أنا لا أعرف ما IDE الذي تستخدمه ، ولكن الكسوف لائق proflier و هناك أيضا قائمة من بعض المفتوحة المصدر المحللون في جافا-المصدر.

باختصار ، المحللون لن أقول لك أي جزء من البرنامج يسمى كيف كثير من الأحيان.

لا الشخصي بلدي البرامج بكثير, لذلك أنا لم يكن لديك الكثير من الخبرة لكن لعبت حوالي مع NetBeans IDE التعريف عندما كنت في اختبار بها.(وعادة ما تستخدم الكسوف أيضا.وسوف ننظر أيضا إلى التنميط الميزات في الكسوف.)

NetBeans التعريف لن أقول لك أي موضوع تم تنفيذها منذ متى و الأساليب التي كانت تسمى كم من الوقت سوف تعطيك شريط الرسوم البيانية تظهر كم من الوقت كل طريقة اتخذت.هذا يجب أن تعطيك إشارة إلى الأسلوب الذي يسبب المشاكل.يمكنك أن تأخذ نظرة على جافا التعريف أن NetBeans IDE تقدم ، إذا كنت غريبة.

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

حظا سعيدا!

1) هو خطأك :)

2) إذا كنت تستخدم الكسوف أو netbeans, حاول استخدام التنميط الميزات -- وينبغي بسرعة أقول لك أين هو رمز إنفاق الكثير من الوقت.

3) إذا تعذر ذلك ، إضافة وحدة الإخراج حيث كنت أعتقد أن الحلقة الداخلية هو-يجب أن تكون قادرة على العثور عليه بسرعة.

نعم ، هناك مثل هذه الأدوات:لديك إلى ملف التعليمات البرمجية.يمكنك إما محاولة TPTP في الكسوف أو ربما محاولة JProfiler.التي سوف تتيح لك رؤية ما يسمى وكيف في كثير من الأحيان.

استخدام منشئ ملفات التعريف.هناك العديد من.هنا قائمة: http://java-source.net/open-source/profilers.على سبيل المثال يمكنك استخدام JIP, جافا مشفرة التعريف.

البرسيم سوف تعطي لطيفة تقرير يظهر ضرب التهم لكل خط الفرع.على سبيل المثال ، هذا الخط أعدم 7 مرات.

الإضافات الكسوف, مخضرم, النمل و فكرة المتاحة.فمن الحرة مفتوحة المصدر, أو يمكنك الحصول على 30 يوم التقييم الترخيص.

إذا كنت تستخدم Sun Java 6 ، ثم أحدث JDK النشرات تأتي مع JVisualVM في bin.هذا هو قادرة على رصد وتحديد أداة من شأنها أن تتطلب القليل جدا من الجهد للاستخدام - حتى أنك لا تحتاج إلى بدء البرنامج الخاص بك مع المعلمات الخاصة - JVisualVM ببساطة قائمة بجميع حاليا بتشغيل جافا العمليات و يمكنك اختيار واحد كنت تريد أن تلعب معه.

هذه الأداة سوف اقول لكم ما هي الأساليب التي تستخدم في كل وقت المعالج.

هناك الكثير من أدوات أكثر قوة هناك ، ولكن قد تلعب مع واحد مجانا لأول مرة.ثم عندما قرأت عن ما هي الميزات الأخرى المتوفرة هناك, سيكون لديك التحبير حول الكيفية التي قد تساعدك.

هذا هو عادة 'وحدة المعالجة المركزية عالية... ؟

هناك نوعان من نوع من وحدة المعالجة المركزية عالية مشاكل

أ) حيث في الموضوع هو استخدام 100 ٪ من وحدة المعالجة المركزية من نواة واحدة (هذا هو السيناريو الخاص بك)

ب) استخدام وحدة المعالجة المركزية هي عالية بشكل غير طبيعي' عندما نقوم بتنفيذ إجراءات معينة.في مثل هذه الحالات المعالجة المركزية قد لا تكون 100% ولكن سوف تكون مرتفعة بشكل غير طبيعي.عادة ما يحدث هذا عندما يكون لدينا وحدة المعالجة المركزية مكثفة العمليات في التعليمات البرمجية مثل تحليل XML ، التسلسل دي-التسلسل.... الخ

الحالة (أ) من السهل أن نحلل.عند تجربة 100% CPU 5-6 موضوع مقالب في 30 ثانية الفاصل الزمني.البحث عن الخيط الذي نشط (في "runnable" الدولة) والذي هو داخل نفس الأسلوب (يمكنك استنتاج ذلك من خلال رصد مكدس الصفحات).على الأرجح أنه سوف يكون مشغول الانتظار' (انظر التعليمات البرمجية أدناه للحصول على مثال)

while(true){
  if(status) break;
  // Thread.sleep(60000); // such a statement would have avoided busy wait
}

الحالة (ب) كما يمكن تحليلها باستخدام الخيط مقالب تؤخذ في المساواة الفاصل.إذا كنت محظوظا سوف تكون قادرة على معرفة المشكلة البرمجية إذا كنت غير قادرة على تحديد المشكلة البرمجية باستخدام الخيط تفريغ.تحتاج إلى اللجوء إلى المحللون.في تجربتي YourKit التعريف هو جيد جدا.

أحاول دائما مع موضوع مقالب الأولى.المحللون فقط سيكون الملاذ الأخير.في 80% من الحالات سوف تكون قادرة على تحديد باستخدام الخيط مقالب.

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

يمكنني استخدام البرسيم مع JUnit حالات الاختبار ، ولكن المفتوحة المصدر, سمعت إيما هو جيد جدا.

في واحدة مترابطة رمز أجد إضافة بعض عبارات مثل هذه:النظام.للخروج.println("A:"+ النظام.وإذا ما اتخذت());هو أبسط و فعالة مثل استخدام منشئ ملفات التعريف.يمكنك قريبا من تقليص جزء من التعليمات البرمجية تسبب المشكلة.

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