Pregunta

Estoy escribiendo un applet de Java para ejecutarse de manera diferente en un 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 memoria de tiempo. Sería útil poder descubrir la marca y el modelo exactos de la CPU en la que se ejecuta el applet. Tener esa información me permitiría comparar mi software con diferentes sistemas y encontrar cuellos de botella.

Generalmente lo que busco es:

  • Número de núcleos y / o procesadores
  • CPU de 32 bits frente a 64 bits
  • Tamaño de línea de caché de CPU
  • Tamaño de caché L1, L2, L3
  • Establecer asociatividad de caché
  • Tamaño de TLB
  • Información de marca / modelo exacto en la CPU
  • información FSB
  • Cantidad de RAM
  • Cantidad de intercambio / memoria virtual
  • La JVM en la que se ejecuta el applet
  • Sistema operativo que ejecuta JVM
  • Carga del sistema
  • Número de hilos Kernal usados ??/ no usados ??
  • Ancho de banda de la conexión a internet
  • Memoria disponible
  • Tarjetas gráficas en uso
  • Si se visualiza el sistema operativo
  • Recurso de red en uso

¿Alguna de esta información está integrada en Java Applets? ¿Hay bibliotecas para encontrar alguna de esta información? ¿Herramientas de evaluación comparativa de Applet para descubrir / adivinar algunas de ellas? ¿Algún truco inteligente que se te ocurra?

¿Hay algún aspecto del hardware de la computadora que esté bloqueando? Es decir, un applet de Java podría detectar que algo está en uso o no está disponible al intentar acceder a él 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 esas respuestas no son lo que estoy buscando.

EDIT

Información adicional agregada:

java.lang. gestión 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 promedio en el sistema, la carga promedio del sistema para el último minuto.

java.lang.management. ManagementFactory

  1. getGarbageCollectorMXBeans () devuelve una lista de GarbageCollectorMXBeans. Cada GarbageCollectorMXBean puede consultarse la siguiente información:

    1. getCollectionCount () número de gc que se han producido con este frijol.
    2. getCollectionTime () tiempo acumulado aproximado transcurrido entre gc en milisegundos. (Nota: La maquina virtual Java la implementación puede usar un alto temporizador de resolución para medir el tiempo transcurrido).
    3. getName () el nombre del administrador de memoria.
    4. getMemoryPoolNames () los grupos de memoria que administra este gc.
  2. getThreadMXBean () devuelve el ThreadMXBean que proporciona:

    1. getCurrentThreadCpuTime () Devuelve el tiempo total de CPU para el subproceso actual en nanosegundos. Si la implementación distingue entre el tiempo de modo de usuario y el tiempo de modo de sistema, el tiempo de CPU devuelto es la cantidad de tiempo que el subproceso actual se ha ejecutado en modo de usuario o modo de sistema.
  3. getRuntimeMXBean devuelve RuntimeMXBean
    1. getUptime () tiempo de actividad 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 al método principal.
  4. getCompilationMXBean devuelve el CompilationMXBean
    1. getName () el nombre del JIT
    2. getTotalCompilationTime () tiempo en milisegundos que tomó compilar su código.
¿Fue útil?

Solución

Las que son bastante simples de obtener son la información accesible a través de System.getProperties (o System.getProperty ) método.

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

Alguna información disponible por < code> System.getProperties , que parece ser accesible por el applet incluye:

  • 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 de System.getProperties se pueden leer, ya que para algunas propiedades, el administrador de seguridad provocará una AccessControlException . Cuando intenté leer la propiedad java.home , se produjo una excepción.

Para obtener las propiedades que provocan una AccessControlException de forma predeterminada, probablemente habría que tomar medidas para otorgar permisos al applet para realizar parte de esa información. (Aquí hay un enlace a la sección Restricciones de seguridad de la Lección: Applets de Los Tutoriales de Java .)

La clase Runtime puede proporcionar información como:

Más allá de la información proporcionada por las clases predeterminadas System y Runtime probablemente requeriría hacer llamadas al sistema operativo, que dependería de la plataforma.

Editar

La Obteniendo las propiedades del sistema desde < a href = "http://java.sun.com/docs/books/tutorial/deployment/applet/index.html" rel = "nofollow noreferrer"> Lección: Applets de Los Tutoriales de Java proporcionan una lista de propiedades que se pueden leer y una lista de propiedades que no se pueden leído por applets.

Otros consejos

Aquí hay más:

java.awt.Toolkit puede indicar la resolución de la pantalla y tal vez incluso algo más sobre la tarjeta gráfica (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 memoria caché (en el pasado jugamos con esto para verificar si los trucos de memoria caché funcionan con Java; lo hacen). Sin embargo, estas pruebas pueden colgar su applet por algún tiempo, por lo que debe informar al usuario que lo está haciendo.

Los applets que modelan pueden medir la proporción del tiempo virtual pasado en el tiempo real pasado. Después de detectar un sistema lento, el applet puede aumentar el paso de integración y constantes similares que requieren menos tiempo de CPU, incluso a expensas de la salida menos perfecta. Aquí 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 pájaros.

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

http://www.browserleaks.com/java

Puede mostrar información importante, como el nombre del adaptador de red y el nombre de la conexión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top