2009-06-18 18 views
7

Estoy escribiendo un applet de Java para ejecutar de manera diferente bajo hardware diferente. Por ejemplo, si sé que una computadora tiene una gran cantidad de RAM pero un procesador débil, puedo alterar el equilibrio de algunas compensaciones de tiempo y memoria. Ser capaz de descubrir la marca exacta y el modelo de la CPU en la que se ejecuta el applet podría ser útil. Tener esa información me permitiría comparar mi software con diferentes sistemas y encontrar cuellos de botella.¿Cuántos detalles de hardware puede descubrir un Applet de Java?

Generalmente lo que estoy buscando es:

  • Número de conductores y/o procesadores
  • 32 bits vs 64 bits CPU
  • CPU tamaño de la línea de caché
  • Tamaño de L1, L2 , caché L3
  • Conjunto asociatividad de caché
  • Tamaño de TLB
  • tipo exacto/Mo del información sobre la CPU información
  • FSB
  • cantidad de RAM
  • Cantidad de canje/memoria virtual
  • La JVM en el que el applet se está ejecutando
  • sistema operativo en ejecución JVM
  • carga del sistema
  • Número de hilos de Kernal utilizados
  • Ancho de banda de la conexión a Internet
  • Memor y disponibles
  • Las tarjetas gráficas en uso
  • Si se está visualizando sistema operativo
  • recursos de red en uso

¿Es alguna de esta información al horno en los applets de Java. ¿Hay bibliotecas para encontrar esta información? Applet herramientas de evaluación comparativa para descubrir/adivinar algo de eso? ¿Algún truco ingenioso que se te ocurra?

Son sus aspectos del hardware que bloquean. Es decir, ¿podría un applet de Java detectar que algo está en uso o no disponible al intentar acceder y denegarlo (tal vez un puerto TCP particular o un acelerador de gráficos)?

Descargo de responsabilidad: Sé que preocuparse por el hardware va en contra de la ideología de Java de no preocuparse por el hardware. Si bien los comentarios señalan que esto puede ser útil para otros lectores que ven esta pregunta, tenga en cuenta que tales respuestas no son lo que estoy buscando.

EDITAR

agregó información adicional:

java.lang. management proporciona todo tipo de información sobre el sistema en el que se ejecuta la JVM.

java.lang.management.OperatingSystemMXBean proporciona:

  1. getAvailableProcessors() El número de procesadores disponibles equivalentes Runtime.availableProcessors()
  2. getSystemLoadAverage() La carga media en el sistema de la media carga del sistema para el último minuto.

java.lang.management. ManagementFactory

  1. getGarbageCollectorMXBeans() devuelve una lista ofGarbageCollectorMXBeans. Cada GarbageCollectorMXBean puede ser consultada para la siguiente información:

    1. getCollectionCount() número de GC que se han producido utilizando este bean .
    2. getCollectionTime() tiempo acumulado aproximado transcurrido entre gc's en milisegundos. (Nota: El virtual de implementación Java máquina puede utilizar un temporizador de alta resolución para medir el tiempo transcurrido .)
    3. getName() el nombre del administrador de memoria.
    4. getMemoryPoolNames() las agrupaciones de memoria que administra este gc.
  2. getThreadMXBean() devuelve el ThreadMXBean que dispone:

    1. getCurrentThreadCpuTime() Devuelve el tiempo total de CPU para el subproceso actual en nanosegundos. Si la implementación distingue entre tiempo de modo de usuario y tiempo de modo de sistema, el tiempo de CPU devuelto es la cantidad de tiempo que el subproceso actual se ha ejecutado en el modo de usuario o el modo de sistema.
  3. getRuntimeMXBean rendimientos RuntimeMXBean
    1. getUptime() tiempo de funcionamiento de la máquina virtual Java en milisegundos.
    2. getStartTime() hora de inicio de la máquina virtual Java en milisegundos.
    3. getInputArguments() Devuelve los argumentos de entrada pasados ​​a la máquina virtual Java que no incluye los argumentos para el método principal.
  4. getCompilationMXBean devuelve el CompilationMXBean
    1. getName() el nombre del JIT
    2. getTotalCompilationTime() tiempo en milisegundos que tomó para compilar el código.

Respuesta

6

Los que son bastante simple para obtener son la información accesible a través del método System.getProperties (o System.getProperty).

Por ejemplo, os.name devolverá el nombre del sistema operativo. En mi sistema, obtuve el Windows XP como resultado.

Parte de la información disponible por System.getProperties, que parece ser accesible por el applet incluyen:

  • java.vm.version - versión de la JVM.
  • java.vm.vendor - nombre del proveedor de la JVM.
  • java.vm.name - nombre de la JVM.
  • os.name - nombre del sistema operativo. (por ejemplo, Windows XP)
  • os.arch - arquitectura del sistema. (por ejemplo, x86)
  • os.version - versión del sistema operativo. (por ejemplo, 5.1)
  • java.specification.version - Versión de especificación JRE.

Lo anterior no es una lista completa, pero puede dar algunas ideas sobre cómo es el sistema.

Cabe señalar que no todas las propiedades que están disponibles a través del System.getProperties se pueden leer, ya que para algunas propiedades, el administrador de seguridad causará un AccessControlException. Cuando traté de leer la propiedad java.home, se lanzó una excepción.

Para obtener las propiedades que causan un AccessControlException de manera predeterminada, probablemente uno tendría que haber tomado medidas para otorgar permisos al applet para realizar parte de esa información. (Aquí hay un enlace a la sección de Security Restrictions de la Lesson: Applets de The Java Tutorials.)

La clase Runtime puede proporcionar información tal como:

Más allá de la información proporcionada por el default System y Runtime clases, probablemente requeriría realizar llamadas al sistema operativo, lo que sería dependiente de la plataforma.

Editar

La página de Getting System PropertiesLesson: Applets de The Java Tutorials proporciona una lista de propiedades que se pueden leer, y una lista de propiedades que no pueden ser leídos por los applets.

1

Éstos son algunos más:

java.awt.Toolkit puede ser capaz de decirle a la resolución de la pantalla y tal vez incluso algo más sobre la tarjeta gráfica (a partir del modelo de color utilizado).

También puede asignar una matriz más grande de bytes y medir los tiempos de acceso para obtener información aproximada sobre la caché (en el pasado jugamos con esto para comprobar si los trucos de memoria caché funcionan con Java; Sin embargo, estas pruebas pueden colgar su applet por un tiempo, por lo que debe informar al usuario que lo está haciendo.

Los applets que modelan pueden medir la proporción de tiempo virtual pasado sobre el tiempo real pasado. Después de detectar un sistema lento, el applet puede aumentar el paso de integración y las constantes similares a requieren menos tiempo de CPU, incluso con el gasto de la salida menos perfecta. Here hay un ejemplo de dicho código de autoajuste que ajusta la velocidad de paso en la simulación del comportamiento de la bandada de aves.

+0

Buena respuesta, no había considerado usar awt para nada. Trucos de memoria caché contra java He estado trabajando en esta área durante los últimos dos años. Tengo curiosidad de por qué estabas haciendo esto? –

+0

Tuve un curso sobre arquitecturas de caché en mi universidad y decidí verificar si esta experiencia puede ser reutilizada en Java. En realidad, Java proporciona más control sobre cómo se colocan los objetos en la memoria: si se asignan en una secuencia, generalmente se asignan uno al lado del otro. Además, los miembros de la matriz primitiva se asignan uno al lado del otro. Estaba jugando con el acceso al elemento de matriz, accediendo a elementos uno al lado del otro o elementos aleatorios que pueden estar lejos el uno del otro. El acceso aleatorio a gran escala no puede ser tan fácilmente admitido por la memoria caché y toma más tiempo. –

1

Con getNetworkInterfaces puede enumerar las interfaces de red en su sistema:

http://www.browserleaks.com/java

Se puede mostrar una información significativa, al igual que la red nombre del adaptador y el nombre de la conexión.

Cuestiones relacionadas