كيف العديد من الأجهزة تفاصيل برنامج Java اكتشاف ؟

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

سؤال

أنا أكتب برنامج Java لتشغيل مختلف الأجهزة.فعلى سبيل المثال إذا كنت تعرف جهاز كمبيوتر يحتوي على كمية كبيرة من ذاكرة الوصول العشوائي ولكن ضعف المعالج, أنا يمكن أن يغير التوازن لبعض الوقت-الذاكرة المفاضلة.كونها قادرة على اكتشاف الدقيق وتقديم نموذج وحدة المعالجة المركزية على برنامج تشغيل يمكن أن تكون مفيدة.وجود مثل هذه المعلومات من شأنها أن تسمح لي أن المعيار برنامجي ضد أنظمة مختلفة والعثور على الاختناقات.

عموما ما أبحث عنه هو:

  • عدد النوى و/أو المعالجات
  • 32 بت مقابل 64 بت وحدة المعالجة المركزية
  • وحدة المعالجة المركزية ذاكرة التخزين المؤقت حجم الخط
  • حجم L1, L2, L3 ذاكرة التخزين المؤقت
  • مجموعة ترابطيات من ذاكرة التخزين المؤقت
  • حجم TLB
  • بالضبط جعل/نموذج المعلومات عن وحدة المعالجة المركزية
  • FSB المعلومات
  • كمية من ذاكرة الوصول العشوائي
  • كمية مبادلة/الذاكرة الظاهرية
  • JVM في أي برنامج يتم تشغيله
  • نظام التشغيل JVM
  • تحميل النظام
  • عدد من استخدامها/غير المستخدمة Kernal المواضيع
  • عرض النطاق الترددي للاتصال بالإنترنت
  • الذاكرة المتاحة
  • بطاقات الرسومات في استخدام
  • إذا كان نظام التشغيل يتم تصور
  • موارد شبكة الاتصال قيد الاستخدام

هو أي من هذه المعلومات خبز في تطبيقات جافا.هل هناك مكتبات العثور على أي من هذه المعلومات ؟ برنامج أدوات القياس لاكتشاف/أظن أن بعض من ذلك ؟ أي الحيل الذكية يمكن ان يخطر لك ؟

هل هناك أي جوانب أجهزة الكمبيوتر التي يتم حظر.ذلك أن برنامج Java كشف أن هناك شيئا في استخدام أو غير متوفرة من خلال محاولة الوصول إليه و رفض (ربما معين منفذ TCP أو مسرع الرسومات).

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

تحرير

إضافة معلومات إضافية:

java.لانغ.إدارة توفر جميع أنواع المعلومات على النظام الذي JVM يعمل على.

java.لانغ.إدارة.OperatingSystemMXBean تنص على ما يلي:

  1. getAvailableProcessors() عدد المعالجات المتاحة يعادل وقت التشغيل.availableProcessors()
  2. getSystemLoadAverage() متوسط الحمل على النظام الحمل المتوسط في اللحظة الأخيرة.

java.لانغ.إدارة.ManagementFactory

  1. getGarbageCollectorMXBeans() بإرجاع قائمة ofGarbageCollectorMXBeans.كل GarbageCollectorMXBean يمكن الاستعلام عن المعلومات التالية:

    1. getCollectionCount() عدد gc التي حدثت استخدام هذا الفول.
    2. getCollectionTime() التقريبية المتراكمة الوقت المنقضي بين gc في ميلي ثانية.(ملاحظة:آلة جافا الافتراضية تنفيذ يجوز استخدام عالية القرار الموقت لقياس الوقت المنقضي.)
    3. getName() اسم مدير الذاكرة.
    4. getMemoryPoolNames() الذاكرة حمامات أن هذا gc يدير.
  2. getThreadMXBean() ترجع ThreadMXBean والتي تنص على:

    1. getCurrentThreadCpuTime() إرجاع مجموع وحدة المعالجة المركزية في الوقت الحالي موضوع في نانو ثانية.إذا كان تنفيذ يميز بين وضع المستخدم الوقت و وضع نظام الوقت ، عاد وقت وحدة المعالجة المركزية هو مقدار الوقت الذي الترابط الحالي قد أعدم في وضع المستخدم أو نظام وضع.
  3. getRuntimeMXBean يعود RuntimeMXBean
    1. getUptime() الجهوزية من آلة جافا الافتراضية في ميلي ثانية.
    2. getStartTime() وقت البدء من آلة جافا الافتراضية في ميلي ثانية.
    3. getInputArguments() يعود الإدخال الوسيطات التي تم تمريرها إلى آلة جافا الافتراضية التي لا تشمل الحجج إلى الأسلوب الرئيسي.
  4. getCompilationMXBean ترجع CompilationMXBean
    1. getName() اسم JIT
    2. getTotalCompilationTime() الوقت بالمللي ثانية استغرق تجميع التعليمات البرمجية الخاصة بك.
هل كانت مفيدة؟

المحلول

تلك التي هي بسيطة جدا للحصول على هي المعلومات التي يمكن الوصول إليها عبر System.getProperties (أو System.getProperty طريقة).

على سبيل المثال ، os.name يعود اسم نظام التشغيل.على نظام بلدي حصلت على Windows XP ونتيجة.

بعض المعلومات المتوفرة System.getProperties, الذي يبدو في متناول الصغير ما يلي:

  • java.vm.version -- نسخة من JVM.
  • java.vm.vendor -- بائع اسم JVM.
  • java.vm.name -- اسم JVM.
  • os.name -- اسم نظام التشغيل.(مثلا ، Windows XP)
  • os.arch -- بنية النظام.(مثلا ، x86)
  • os.version -- نسخة من نظام التشغيل.(مثلا ، 5.1)
  • java.specification.version -- JRE مواصفات الإصدار.

أعلاه ليست قائمة شاملة ، لكنها يمكن أن تعطي بعض الأفكار حول ما هو مثل.

وتجدر الإشارة إلى أنه ليست كل الخصائص المتوفرة من خلال System.getProperties يمكن قراءة بعض خصائص مدير الأمن سوف يسبب AccessControlException.عندما حاولت قراءة java.home عندما تم طرح استثناء.

للحصول على تلك الخصائص التي تسبب AccessControlException افتراضي واحد من المحتمل أن تكون الخطوات المتخذة لمنح أذونات إلى برنامج لأداء بعض من تلك المعلومات.(هنا رابط القيود الأمنية القسم الدرس:تطبيقات من جافا الدروس.)

على Runtime فئة يمكن أن توفر معلومات مثل:

  • عدد المعالجات (أو النوى أو منطقية المواضيع ، ويفترض) المتاحة JVM من قبل Runtime.availableProcessors الأسلوب.
  • آلة جافا الافتراضية ذاكرة المعلومات ، مثل freeMemory, maxMemory, ، totalMemory.

فضلا عن المعلومات المقدمة من قبل الافتراضي System و Runtime فصول قد تتطلب إجراء المكالمات إلى نظام التشغيل الذي سيكون منصة تعتمد على.

تحرير

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

نصائح أخرى

وفيما يلي بعض أكثر:

java.awt.أدوات قد تكون قادرة على معرفة دقة الشاشة وربما ما هو أكثر عن بطاقة الرسومات (من يستخدم نموذج اللون).

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

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

مع getNetworkInterfaces يمكن تعداد واجهات شبكة الاتصال في النظام الخاص بك:

http://www.browserleaks.com/java

قد تظهر المعلومات الهامة مثل محول الشبكة اسم و اسم الاتصال.

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