Сколько деталей аппаратного обеспечения может обнаружить Java-апплет?

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

Вопрос

Я пишу Java-апплет, который будет работать по-разному на разном оборудовании.Например, если я знаю, что компьютер имеет большой объем оперативной памяти, но слабый процессор, я могу изменить баланс некоторых компромиссов между временем и памятью.Может быть полезно узнать точную марку и модель процессора, на котором запущен апплет.Наличие такой информации позволило бы мне сравнить мое программное обеспечение с различными системами и найти узкие места.

Как правило, то, что я ищу, это:

  • Количество ядер и/или процессоров
  • 32-разрядный против 64-разрядного процессора
  • Размер строки кэша процессора
  • Размер кэша L1, L2, L3
  • Установите ассоциативность кэша
  • Размер TLB
  • Точная информация о марке / модели процессора
  • Информация ФСБ
  • Объем оперативной памяти
  • Объем подкачки/ виртуальной памяти
  • JVM, в которой запускается апплет
  • Операционная система, работающая под управлением JVM
  • Загрузка системы
  • Количество используемых / неиспользуемых потоков ядра
  • Пропускная способность интернет-соединения
  • Доступная память
  • Используемые видеокарты
  • Если визуализируется Операционная система
  • Используемый сетевой ресурс

Запечена ли какая-либо из этих данных в Java-апплеты?Существуют ли библиотеки для поиска какой-либо из этих сведений?Инструменты бенчмаркинга апплетов, позволяющие обнаружить / угадать что-то из этого?Какие-нибудь хитроумные трюки вы можете придумать?

Являются ли их какие-либо аспекты компьютерного оборудования блокирующими.То есть, может ли Java-апплет обнаружить, что что-то используется или недоступно, попытавшись получить к нему доступ и получив отказ (возможно, определенный TCP-порт или графический ускоритель).

Отказ от ответственности:Я знаю, что забота об оборудовании противоречит идеологии Java, согласно которой не нужно заботиться об оборудовании.Хотя комментарии, указывающие на это, могут быть полезны другим читателям, которые видят этот вопрос, пожалуйста, обратите внимание, что такие ответы - это не то, что я ищу.

Редактировать

Добавлена дополнительная информация:

java.язык.Руководство предоставляет все виды информации о системе, в которой запущена JVM.

java.lang.management.Операционная система XBEAN обеспечивает:

  1. getAvailableProcessors() - Доступные процессоры() Эквивалентное количество доступных процессоров Среда выполнения.Доступные процессоры()
  2. getSystemLoadAverage() Средняя нагрузка на систему средняя загрузка системы за последнюю минуту.

java.lang.management.Управленческая фабрика

  1. getGarbageCollectorMXBeans() возвращает список garbagecollectormxbeans.Каждый Мусорщик xbean может быть запрошена следующая информация:

    1. getCollectionCount() количество gc, которые были выполнены с использованием этого компонента .
    2. getCollectionTime() приблизительное накопленное время, прошедшее между gc в миллисекундах.(Примечание:Реализация виртуальной машины Java может использовать таймер с высоким разрешением для измерения прошедшего времени.)
    3. getName() имя менеджера памяти.
    4. getMemoryPoolNames() пулы памяти, которыми управляет этот gc.
  2. getThreadMXBean() возвращает ThreadMXBean ( многопоточный ) который обеспечивает:

    1. getCurrentThreadCpuTime() Возвращает общее процессорное время для текущего потока в наносекундах.Если реализация проводит различие между временем пользовательского режима и временем системного режима, возвращаемое процессорное время - это количество времени, которое текущий поток выполнил в пользовательском или системном режиме.
  3. getRuntimeMXBean Получить runtimemxbean ВОЗВРАТ RuntimeMXBean - время выполнения
    1. Время получения () время безотказной работы виртуальной машины Java измеряется в миллисекундах.
    2. getStartTime() время запуска виртуальной машины Java выражается в миллисекундах.
    3. getInputArguments() Возвращает входные аргументы, переданные виртуальной машине Java, которая не включает аргументы метода main.
  4. getCompilationMXBean - получить компиляцию XBEAN возвращает Компиляцияmxbean
    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 по умолчанию, вероятно, необходимо было бы предпринять шаги, чтобы предоставить апплету разрешения на выполнение некоторых из этих действий.(Вот ссылка на Ограничения безопасности раздел программы Урок:Программы От Учебные пособия по Java.)

Тот самый Runtime класс может предоставлять такую информацию, как:

  • Количество процессоров (или ядер, или логических потоков, предположительно), доступных виртуальной машине по Runtime.availableProcessors способ.
  • Информация о памяти виртуальной машины Java, такая как freeMemory, maxMemory, и totalMemory.

Помимо информации, предоставляемой по умолчанию System и Runtime классы, вероятно, потребовали бы выполнения вызовов операционной системы, которые зависели бы от платформы.

Редактировать

Тот самый Получение системных свойств страница из Урок:Программы из Учебные пособия по Java предоставляет список свойств, которые могут быть прочитаны, и список свойств, которые не могут быть прочитаны апплетами.

Другие советы

Вот еще несколько:

java.awt.Toolkit возможно, удастся узнать разрешение экрана и, возможно, даже что-то еще о графической карте (исходя из используемой цветовой модели).

Вы также можете выделить некоторый больший массив байтов и измерить время доступа, чтобы получить приблизительную информацию о кэше (в прошлом мы играли с этим, чтобы проверить, работают ли трюки с кэшированием памяти вообще с Java;они это делают).Однако эти тесты могут на некоторое время зависнуть в вашем апплете, поэтому вам необходимо сообщить пользователю, что вы делаете.

Апплеты, выполняющие моделирование, могут измерять отношение затраченного виртуального времени к затраченному реальному.Обнаружив медленную систему, апплет может увеличить шаг интеграции и аналогичные константы, чтобы сократить процессорное время, даже за счет менее совершенного вывода. Здесь существует пример такого самонастраивающегося кода, который регулирует скорость шага при моделировании поведения птичьей стаи.

С getNetworkInterfaces Получить сетевые интерфейсы вы можете перечислять сетевые интерфейсы в вашей системе:

http://www.browserleaks.com/java

В нем может отображаться важная информация, такая как имя сетевого адаптера и имя подключения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top