2009-06-18 18 views
7

मैं अलग हार्डवेयर के तहत अलग ढंग से चलाने के लिए एक जावा एप्लेट लिख रहा हूँ। उदाहरण के लिए यदि मुझे पता है कि कंप्यूटर में बड़ी मात्रा में रैम है लेकिन एक कमजोर प्रोसेसर है, तो मैं कुछ समय-मेमोरी ट्रेड-ऑफ के संतुलन को बदल सकता हूं। सीपीयू के सटीक मेक और मॉडल को खोजने में सक्षम होने पर ऐपलेट चल रहा है सहायक हो सकता है। ऐसी जानकारी रखने से मुझे अपने सिस्टम को विभिन्न प्रणालियों के खिलाफ बेंचमार्क करने और बाधाओं को खोजने की अनुमति मिल जाएगी।जावा ऐप्पल डिस्कवर कितने हार्डवेयर विवरण कर सकते हैं?

आम तौर पर मैं क्या तलाश कर रहा हूँ है:

  • कोर और/या प्रोसेसर
  • 32 बिट बनाम 64 बिट सीपीयू
  • सीपीयू कैश लाइन आकार
  • एल 1, एल 2 का आकार की संख्या , L3 कैश
  • कैश की
  • सेट संबद्धता
  • TLB
  • सटीक मेक/मो का आकार CPU पर डेल जानकारी
  • एफएसबी जानकारी रैम
  • राशि
  • स्वैप की राशि/आभासी स्मृति
  • JVM जिसमें एप्लेट रन
  • किया जा रहा है
  • ऑपरेटिंग सिस्टम JVM
  • सिस्टम लोड
  • चल
  • प्रयुक्त/अप्रयुक्त कर्नल धागे की संख्या
  • इंटरनेट कनेक्शन की बैंडविड्थ
  • मेमोर उपयोग

में y उपलब्ध

  • ग्राफिक्स कार्ड उपयोग
  • में तो ऑपरेटिंग सिस्टम कल्पना की जा रही है
  • नेटवर्क संसाधन इस जानकारी जावा एप्लेट में शामिल किया हुआ के किसी भी है। क्या इस जानकारी में से कोई भी ढूंढने के लिए पुस्तकालय हैं? एप्लेट बेंचमार्किंग टूल्स कुछ खोजने/अनुमान लगाने के लिए? आप किसी भी चालाक चाल के बारे में सोच सकते हैं?

    उनके कंप्यूटर हार्डवेयर जो अवरुद्ध कर रहे हैं के किसी भी पहलू हैं। यही है, जावा ऐपलेट का पता लगा सकता है कि इसका उपयोग करने के लिए कुछ उपयोग किया जा रहा है या अनुपलब्ध है और इसे अस्वीकार कर दिया जा रहा है (शायद एक विशेष टीसीपी पोर्ट या ग्राफिक्स त्वरक)।

    अस्वीकरण: मुझे पता है कि हार्डवेयर के बारे में देखभाल के हार्डवेयर के बारे में देखभाल नहीं की जावा विचारधारा के खिलाफ जाता है। हालांकि टिप्पणियां यह इंगित करती हैं कि अन्य प्रश्नों के लिए यह उपयोगी हो सकता है जो इस प्रश्न को देखते हैं, कृपया ध्यान दें कि ऐसे उत्तर वे नहीं हैं जिन्हें मैं ढूंढ रहा हूं।

    संपादित

    जोड़ी अतिरिक्त जानकारी:

    java.lang। management प्रणाली है जो JVM पर चल रहा है के बारे में जानकारी के सभी प्रकार प्रदान करता है।

    java.lang.management।OperatingSystemMXBean प्रदान करता है:

    1. getAvailableProcessors() बराबर Runtime.availableProcessors()
    2. getSystemLoadAverage() औसत लोड प्रणाली अंतिम मिनट के लिए प्रणाली लोड औसत पर उपलब्ध प्रोसेसर की संख्या।

    java.lang.management। ManagementFactory

    1. getGarbageCollectorMXBeans() एक सूची ofGarbageCollectorMXBeans देता है। प्रत्येक GarbageCollectorMXBean निम्नलिखित जानकारी के लिए क्वेरी जा सकता है:

      जीसी जो इस सेम का उपयोग कर हुईं का
      1. getCollectionCount() संख्या।
      2. getCollectionTime() अनुमानित संचित समय जीसी के मिलीसेकंड के बीच समाप्त हो गया। (नोट: जावा आभासी मशीन कार्यान्वयन बीता हुआ समय को मापने के लिए एक उच्च संकल्प टाइमर का उपयोग कर सकते हैं।)
      3. getName() स्मृति प्रबंधक का नाम।
      4. getMemoryPoolNames() मेमोरी पूल जो इस जीसी प्रबंधन करता है।

        1. getCurrentThreadCpuTime() रिटर्न नैनोसेकंड में वर्तमान थ्रेड के लिए कुल सीपीयू समय:
      5. getThreadMXBean()ThreadMXBean प्रदान करता है जो देता है। यदि कार्यान्वयन उपयोगकर्ता मोड समय और सिस्टम मोड समय के बीच अंतर करता है, तो लौटाया गया CPU समय उस समय की मात्रा है जब वर्तमान थ्रेड उपयोगकर्ता मोड या सिस्टम मोड में निष्पादित होता है।

    2. getRuntimeMXBean रिटर्न RuntimeMXBean
      1. getUptime() मिलीसेकेंड में जावा आभासी मशीन के सक्रिय रहने की अवधि।
      2. getStartTime() मिलीसेकंड में जावा वर्चुअल मशीन का प्रारंभ समय।
      3. getInputArguments() जावा वर्चुअल मशीन को पास किए गए इनपुट तर्क देता है जिसमें मुख्य विधि के तर्क शामिल नहीं हैं।
    3. getCompilationMXBeanCompilationMXBean
      1. getName() मिलीसेकेंड में JIT
      2. getTotalCompilationTime() समय यह अपने कोड संकलित करने के लिए ले लिया के नाम देता है।
  • उत्तर

    6

    जो कि प्राप्त करने के लिए काफी सरल हैं जानकारी विधि System.getProperties (या System.getProperty) के माध्यम से सुलभ हैं।

    उदाहरण के लिए, os.name ऑपरेटिंग सिस्टम का नाम वापस कर देगा। मेरे सिस्टम पर, मुझे परिणाम के रूप में Windows XP मिला।

    कुछ जानकारी System.getProperties द्वारा उपलब्ध है, जो एप्लेट द्वारा सुलभ हो रहा है में शामिल हैं:

    • java.vm.version - JVM का संस्करण।
    • java.vm.vendor - जेवीएम का विक्रेता नाम।
    • java.vm.name - जेवीएम का नाम।
    • os.name - ऑपरेटिंग सिस्टम का नाम। (उदाहरण के लिए Windows XP)
    • os.arch - सिस्टम का आर्किटेक्चर। (उदाहरण के लिए x86)
    • os.version - ऑपरेटिंग सिस्टम का संस्करण। (उदाहरण के लिए 5.1)
    • java.specification.version - जेआरई विनिर्देश संस्करण।

    उपरोक्त एक व्यापक सूची नहीं है, लेकिन यह सिस्टम के समान होने के बारे में कुछ विचार दे सकता है।

    यह ध्यान देने योग्य है कि नहीं सभी गुण है कि System.getProperties माध्यम से उपलब्ध हैं, पढ़ा जा सकता है कुछ संपत्तियों के लिए के रूप में, सुरक्षा प्रबंधक एक AccessControlException का कारण होगा। जब मैंने java.home संपत्ति को पढ़ने की कोशिश की, तो एक अपवाद फेंक दिया गया।

    उन गुणों जो डिफ़ॉल्ट रूप से एक AccessControlException कारण प्राप्त करने के लिए, एक शायद उन जानकारी के कुछ प्रदर्शन करने के लिए एप्लेट के लिए अनुमति देने के लिए उठाए गए कदमों का होना जरूरी होगा। (यहाँ The Java Tutorials से Lesson: Applets की Security Restrictions अनुभाग के लिए एक कड़ी है।)

    Runtime वर्ग इस तरह के रूप में जानकारी प्रदान कर सकते हैं:

    • प्रोसेसर की संख्या (या कोर, या तार्किक सूत्र, शायद) के लिए उपलब्ध Runtime.availableProcessors विधि द्वारा JVM।
    • जावा वर्चुअल मशीन की मेमोरी जानकारी, जैसे कि freeMemory, maxMemory, और totalMemory

    डिफ़ॉल्ट System और Runtime वर्गों द्वारा उपलब्ध कराई गई जानकारी के अलावा शायद ऑपरेटिंग सिस्टम है, जो मंच पर निर्भर होगा करने के लिए कॉल करने की आवश्यकता होगी।

    संपादित

    The Java Tutorials की Lesson: Applets से Getting System Properties पेज संपत्तियों की एक सूची है जो पढ़ा जा सकता है, और गुण है कि एप्लेट द्वारा पढ़ा नहीं जा सकता की एक सूची प्रदान करता है।

    1

    यहां कुछ और कर रहे हैं:

    java.awt.Toolkit (प्रयुक्त रंग मॉडल से) स्क्रीन संकल्प और भी हो सकता है ग्राफिक कार्ड के बारे में अधिक कुछ बता करने में सक्षम हो सकता है।

    आप कैश के बारे में अनुमानित जानकारी प्राप्त करने के लिए बाइट्स की कुछ बड़ी सरणी आवंटित कर सकते हैं और एक्सेस समय को माप सकते हैं (अतीत में हमने यह जांचने के लिए खेला था कि स्मृति कैश चाल जावा के साथ काम करती है या नहीं; वे करते हैं)। हालांकि ये परीक्षण कुछ समय के लिए आपके एप्लेट को लटका सकते हैं, इसलिए आपको उपयोगकर्ता को यह सूचित करने की आवश्यकता है कि आप कर रहे हैं।

    मॉडलिंग करने वाले ऐप्पल पास किए गए वास्तविक समय पर पारित वर्चुअल समय के अनुपात को माप सकते हैं। एक धीमी प्रणाली का पता लगाने के बाद, एप्लेट एकीकरण चरण और इसी तरह के स्थिरांक को कम CPU आउटपुट की आवश्यकता के लिए बढ़ा सकता है, यहां तक ​​कि कम सटीक आउटपुट की कीमत भी। Here ऐसे स्वयं ट्यूनिंग कोड का एक उदाहरण है जो पक्षी झुंड व्यवहार के अनुकरण में चरण की गति को समायोजित करता है।

    http://www.browserleaks.com/java

    यह एक महत्वपूर्ण जानकारी, जैसे नेटवर्क एडाप्टर नाम और कनेक्शन का नाम दिखा सकता है:

    +0

    अच्छा जवाब, मैंने बिल्कुल उपयोग नहीं किया था। जावा के खिलाफ मेमोरी कैश चाल मैं पिछले दो वर्षों से इस क्षेत्र में काम कर रहा हूं। मैं उत्सुक हूँ तुम ऐसा क्यों कर रहे थे? –

    +0

    मेरे विश्वविद्यालय में कैश आर्किटेक्चर पर मेरा कोर्स था और यह जांचने का फैसला किया कि जावा में इस अनुभव का पुन: उपयोग किया जा सकता है या नहीं। जावा वास्तव में स्मृति में वस्तुओं को कैसे रखा जाता है, इस पर अधिक नियंत्रण प्रदान करता है: यदि अनुक्रम में आवंटित किया जाता है, तो आमतौर पर उन्हें एक दूसरे के बगल में आवंटित किया जाता है। इसके अलावा, आदिम सरणी के सदस्यों को एक-दूसरे के बगल में आवंटित किया जाता है। मैं सरणी तत्व पहुंच के साथ खेल रहा था, एक दूसरे के बगल में तत्वों या यादृच्छिक तत्वों को एक दूसरे से दूर कर सकता था। यादृच्छिक, व्यापक पैमाने पर पहुंच को कैश द्वारा आसानी से समर्थित नहीं किया जा सकता है और अधिक समय लगता है। –

    1
    getNetworkInterfaces आप अपने सिस्टम में नेटवर्क इंटरफेस की गणना कर सकते हैं

    संबंधित मुद्दे