2009-06-18 12 views
7

Piszę aplet Javy, aby działał inaczej pod innym sprzętem. Na przykład, jeśli wiem, że komputer ma dużą ilość pamięci RAM, ale słabego procesora, mogę zmienić bilans kompromitacji pamięci czasowej. Możliwość odnalezienia dokładnej marki i modelu procesora, na którym działa aplet, może być pomocna. Posiadanie takich informacji pozwoliłoby mi na porównanie mojego oprogramowania z różnymi systemami i znalezienie wąskich gardeł.Ile szczegółów sprzętowych może aplet Java odkryć?

Generalnie co szukam jest:

  • Liczba żył i/lub przetwórców
  • 32 bit vs 64 bit CPU
  • CPU rozmiar linii pamięci podręcznej
  • wielkość L1, L2 L3 cache
  • Set asocjatywność cache
  • Rozmiar TLB
  • Dokładne Marka/Mo del informacji o CPU informacje
  • FSB
  • Kwota RAM
  • Kwota wymiany/Pamięć wirtualna
  • JVM, w której aplet jest prowadzony
  • System operacyjny działa JVM
  • System Load
  • Liczba używanych/nieużywanych nici Kernala
  • Przepustowość połączenia z Internetem
  • Memor
  • Karty graficzne dostępne w użyciu
  • y Jeśli system operacyjny jest wizualizowane
  • zasób sieciowy używany

Czy którykolwiek z tych informacji pieczone w apletów Java. Czy istnieją biblioteki do wyszukiwania którejkolwiek z tych informacji? Aplet benchmarkingowy narzędzi do odkrywania/odgadywania niektórych z nich? Jakieś sprytne sztuczki, które możesz wymyślić?

Czy wszystkie elementy sprzętu komputerowego są blokowane. To znaczy, że aplet Javy może wykryć, że coś jest w użyciu lub jest niedostępne, próbując uzyskać do niego dostęp i odmawiając mu dostępu (może to być konkretny port TCP lub akcelerator grafiki).

Nota prawna: Wiem, że dbanie o sprzęt jest sprzeczne z ideologią Javy, która nie dba o sprzęt. Chociaż komentarze wskazują na to, że mogą być pomocne dla innych czytelników, którzy widzą to pytanie, proszę zauważyć, że takie odpowiedzi nie są tym, czego szukam.

EDIT

Dodano dodatkowe informacje:

java.lang. management dostarcza wszelkiego rodzaju informacji o systemie, na którym działa JVM.

java.lang.management.OperatingSystemMXBean zapewnia:

  1. getAvailableProcessors() liczba dostępnych procesorów równoważnych Runtime.availableProcessors()
  2. getSystemLoadAverage() Średnie obciążenie w systemie średnie obciążenie systemu do ostatniej chwili.

java.lang.management. ManagementFactory

  1. getGarbageCollectorMXBeans() Zwraca listę ofGarbageCollectorMXBeans. Każdy GarbageCollectorMXBean można przeszukiwać za następującymi informacjami:

    1. getCollectionCount() liczba GC, które wystąpiły przy użyciu tej Bean.
    2. getCollectionTime() przybliżony skumulowany czas, który upłynął między wartościami gc w milisekundach. (Uwaga: Wirtualna maszyna Java realizacja może używać wysokiej rozdzielczości stoper do pomiaru czasu, który upłynął .)
    3. getName() nazwa menedżera pamięci.
    4. getMemoryPoolNames() pule pamięci, którymi zarządza ten gc.
  2. getThreadMXBean() zwraca ThreadMXBean który stanowi:

    1. getCurrentThreadCpuTime() Zwraca całkowity czas procesora dla bieżącego wątku nanosekund. Jeśli implementacja rozróżnia czas trybu użytkownika i czas trybu systemowego, zwrócony czas procesora to czas, w którym bieżący wątek został wykonany w trybie użytkownika lub trybie systemowym.
  3. getRuntimeMXBean powraca RuntimeMXBean
    1. getUptime() uptime maszyny wirtualnej Java w milisekundach.
    2. getStartTime() Czas uruchamiania maszyny wirtualnej Java w milisekundach.
    3. Zwraca argumenty wejściowe przekazane do wirtualnej maszyny języka Java, które nie zawierają argumentów metody głównej.
  4. getCompilationMXBean zwraca CompilationMXBean
    1. getName() nazwę JIT
    2. getTotalCompilationTime() czas w milisekundach zajęło skompilować kod.

Odpowiedz

6

Te, które są bardzo proste, aby uzyskać informacje dostępne są za pośrednictwem metody System.getProperties (lub System.getProperty). Na przykład os.name zwróci nazwę systemu operacyjnego. W moim systemie otrzymałem jako wynik Windows XP.

Niektóre dostępne przez System.getProperties informacja, która wydaje się być dostępne przez aplet obejmują:

  • java.vm.version - wersję JVM.
  • java.vm.vendor - nazwa dostawcy JVM.
  • java.vm.name - nazwa maszyny JVM.
  • os.name - nazwa systemu operacyjnego. (na przykład Windows XP)
  • os.arch - architektura systemu. (np. x86)
  • os.version - wersja systemu operacyjnego. (na przykład 5.1)
  • java.specification.version - wersja specyfikacji JRE.

Powyższa lista nie jest wyczerpująca, ale może dać pewne wyobrażenia na temat systemu.

Należy zauważyć, że nie wszystkie właściwości dostępne przez System.getProperties można odczytać, tak jak w przypadku niektórych właściwości, menedżer bezpieczeństwa spowoduje AccessControlException. Kiedy próbowałem odczytać właściwość java.home, zgłoszony został wyjątek.

Aby uzyskać domyślne właściwości, które powodują domyślne ustawienie, należy prawdopodobnie wykonać kroki, aby zezwolić apletowi na wykonanie niektórych z tych informacji. (Tu jest link do sekcji Security Restrictions na Lesson: Applets z The Java Tutorials).

Klasa Runtime może dostarczyć informacje, takie jak:

poza informacjami przedstawionymi przez domyślnie System i Runtime klas prawdopodobnie wymagać wykonywania połączeń do systemu operacyjnego, które byłyby zależne od platformy.

Edit

Getting System Properties strona z Lesson: Applets z The Java Tutorials zawiera listę właściwości, które można czytać i listę właściwości, które nie mogą być odczytane przez apletów.

1

Oto kilka:

java.awt.Toolkit może być w stanie powiedzieć, rozdzielczość ekranu, a może nawet coś więcej o karcie graficznej (od stosowanego modelu kolorów).

Możesz także przydzielić trochę większej ilości bajtów i zmierzyć czasy dostępu, aby uzyskać przybliżone informacje na temat pamięci podręcznej (w przeszłości graliśmy z tym, aby sprawdzić, czy sztuczki z pamięci podręcznej w ogóle działają z Javą). Jednak te testy mogą zawiesić Twój aplet na jakiś czas, więc musisz poinformować użytkownika, że ​​robisz.

Aplety służące do modelowania mogą mierzyć stosunek czasu wirtualnego przekazanego w minionym czasie rzeczywistym. Po wykryciu powolnego systemu aplet może zwiększyć krok integracji i podobne stałe, co wymaga mniej czasu procesora, nawet kosztem mniej doskonałego wyjścia. Here Istnieje przykład takiego samodostrajania kodu, który dostosowuje prędkość kroku w symulacji zachowania stada ptaków.

+0

Dobra odpowiedź, nie myślałem o używaniu awt w ogóle. Sztuczki pamięciowe przeciwko java Pracuję w tej dziedzinie od dwóch lat. Ciekawi mnie, dlaczego to robiłeś? –

+0

Miałem kurs na architekturze pamięci podręcznej na mojej uczelni i postanowiłem sprawdzić, czy to doświadczenie może być ponownie wykorzystane w Javie. Java faktycznie zapewnia większą kontrolę nad sposobem umieszczania obiektów w pamięci: jeśli są one przydzielane w sekwencji, są zwykle przydzielane obok siebie. Ponadto członkowie prymitywnej tablicy są przydzielani obok siebie. Grałem z dostępem do elementu tablicy, uzyskując dostęp do elementów obok siebie lub losowych elementów, które mogą się znajdować daleko od siebie. Losowy dostęp na dużą skalę nie może być tak łatwo wspierany przez pamięć podręczną i trwa dłużej. –

1

Z getNetworkInterfaces można wyliczyć interfejsów sieciowych w systemie:

http://www.browserleaks.com/java

może wykazać znaczące informacje, takie jak nazwa karty sieciowej i nazwę połączenia.

Powiązane problemy