Question

J'écris un applet Java pour qu'il s'exécute différemment avec un matériel différent. Par exemple, si je sais qu'un ordinateur dispose d'une grande quantité de RAM, mais d'un processeur faible, je peux modifier l'équilibre entre certains compromis temps-mémoire. Il peut être utile de connaître la marque et le modèle exact de la CPU sur laquelle l'application est exécutée. Avoir ces informations me permettrait de comparer mon logiciel à différents systèmes et de trouver des goulots d'étranglement.

En général, ce que je recherche, c'est:

  • Nombre de cœurs et / ou de processeurs
  • CPU 32 bits vs 64 bits
  • Taille de la ligne de cache de l'UC
  • Taille du cache L1, L2, L3
  • Définir l'associativité du cache
  • Taille du TLB
  • Informations exactes sur le fabricant / modèle de la CPU
  • Informations sur le FSB
  • Quantité de RAM
  • Quantité de mémoire virtuelle / d'échange
  • La machine virtuelle Java dans laquelle l'applet est en cours d'exécution
  • Système d'exploitation exécutant JVM
  • Charge système
  • Nombre de threads Kernal utilisés / non utilisés
  • Largeur de bande de la connexion Internet
  • Mémoire disponible
  • Cartes graphiques en cours d'utilisation
  • Si le système d'exploitation est en cours de visualisation
  • Utilisation de la ressource réseau

Certaines de ces informations sont-elles intégrées aux applets Java? Existe-t-il des bibliothèques pour trouver ces informations? Des outils d'analyse comparative d'applets pour en découvrir / deviner une partie? Des astuces que vous pouvez imaginer?

Leurs aspects du matériel informatique sont-ils bloquants? En d’autres termes, une applet Java pourrait-elle détecter que quelque chose est en cours d’utilisation ou indisponible en essayant d’y accéder et en étant refusée (peut-être un port TCP ou un accélérateur graphique particulier).

Clause de non-responsabilité: Je sais que se soucier du matériel va à l’encontre de l’idéologie Java voulant que l’on ne se soucie pas du matériel. Bien que les commentaires indiquent que cela peut être utile pour les autres lecteurs qui voient cette question, veuillez noter que de telles réponses ne sont pas ce que je cherche.

MODIFIER

Ajout d'informations supplémentaires:

java.lang. management fournit toutes sortes d'informations sur le système utilisé par la machine virtuelle.

java.lang.management. OperatingSystemMXBean fournit:

  1. getAvailableProcessors () Nombre de processeurs disponibles équivalents Runtime.availableProcessors ()
  2. getSystemLoadAverage () La charge moyenne sur le système La charge moyenne du système pour la dernière minute.

java.lang.management. ManagementFactory

  1. getGarbageCollectorMXBeans () renvoie une liste deGarbageCollectorMXBeans. Chaque GarbageCollectorMXBean peut être interrogé. les informations suivantes:

    1. getCollectionCount () nombre de gc qui ont eu lieu en utilisant cette haricot.
    2. getCollectionTime () temps approximatif accumulé écoulé entre gc est en millisecondes. (Remarque: La machine virtuelle Java la mise en œuvre peut utiliser un haut minuterie de résolution pour mesurer la temps écoulé.)
    3. getName () le nom du gestionnaire de mémoire.
    4. getMemoryPoolNames () les pools de mémoire que ce groupe gère.
  2. getThreadMXBean () renvoie le ThreadMXBean qui fournit:

    1. getCurrentThreadCpuTime () Retourne le temps CPU total du thread actuel en nanosecondes. Si l'implémentation fait la distinction entre l'heure du mode utilisateur et l'heure du mode système, le temps processeur renvoyé est la durée d'exécution du thread en cours en mode utilisateur ou en mode système.
  3. getRuntimeMXBean renvoie RuntimeMXBean
    1. getUptime () la disponibilité de la machine virtuelle Java en millisecondes.
    2. getStartTime () heure de démarrage de la machine virtuelle Java en millisecondes.
    3. getInputArguments () Retourne les arguments d'entrée passés à la machine virtuelle Java qui n'inclut pas les arguments de la méthode main.
  4. getCompilationMXBean renvoie le CompilationMXBean
    1. getName () le nom du JIT
    2. getTotalCompilationTime () temps en millisecondes pour compiler votre code.
Était-ce utile?

La solution

Celles qui sont assez simples à obtenir sont les informations accessibles via le System.getProperties (ou System.getProperty ).

Par exemple, os.name renverra le nom du système d'exploitation. Sur mon système, le résultat est Windows XP .

Certaines informations disponibles sous < code> System.getProperties , qui semble être accessible par l'applet, notamment:

  • java.vm.version - version de la machine virtuelle Java.
  • java.vm.vendor - nom du fournisseur de la machine virtuelle.
  • java.vm.name - nom de la machine virtuelle Java.
  • os.name - nom du système d'exploitation. (par exemple, Windows XP )
  • os.arch - architecture du système. (par exemple, x86 )
  • os.version - version du système d'exploitation. (par exemple, 5.1 )
  • java.specification.version - version de la spécification JRE.

La liste ci-dessus n’est pas exhaustive, mais elle peut donner quelques idées sur le fonctionnement du système.

Il convient de noter que toutes les propriétés disponibles via System.getProperties ne peuvent pas être lues, car pour certaines propriétés, le gestionnaire de sécurité provoquera une AccessControlException . Lorsque j'ai essayé de lire la propriété java.home , une exception a été levée.

Pour obtenir les propriétés qui provoquent une AccessControlException par défaut, il faudrait probablement suivre certaines étapes pour donner des autorisations à l'applet afin d'exécuter certaines de ces informations. (Voici un lien vers la section Restrictions de sécurité . de la Leçon: Applets à partir de Les didacticiels Java .)

La classe Runtime peut fournir des informations telles que:

Au-delà des informations fournies par les classes System et Runtime par défaut, il serait probablement nécessaire de passer des appels au système d'exploitation, qui dépendrait de la plate-forme.

Modifier

La page Obtention des propriétés du système à partir de < a href = "http://java.sun.com/docs/books/tutorial/deployment/applet/index.html" rel = "nofollow noreferrer"> Leçon: applets de Les tutoriels Java fournissent une liste des propriétés pouvant être lues et des propriétés ne pouvant pas être lues. lu par les applets.

Autres conseils

En voici d'autres:

java.awt.Toolkit peut être capable de dire la résolution de l'écran et peut-être même quelque chose de plus à propos de la carte graphique (à partir du modèle couleur utilisé).

Vous pouvez également allouer un plus grand tableau d'octets et mesurer les temps d'accès pour obtenir des informations approximatives sur le cache (nous jouions auparavant avec cela pour vérifier si les astuces du cache mémoire fonctionnaient bien avec Java; ce qui est le cas). Cependant, ces tests peuvent bloquer votre applet pendant un certain temps, vous devez donc informer l'utilisateur de ce que vous faites.

Les applets qui modélisent peuvent mesurer le rapport entre le temps virtuel passé et le temps réel écoulé. Après avoir détecté un système lent, l'applet peut augmenter l'étape d'intégration et des constantes similaires nécessitent moins de temps processeur, même si la sortie est moins parfaite. Ici , il y a un exemple de code de réglage automatique qui ajuste la vitesse de pas dans la simulation du comportement du troupeau d'oiseaux.

Avec getNetworkInterfaces , vous pouvez énumérer les interfaces réseau de votre système:

http://www.browserleaks.com/java

Il peut afficher des informations importantes, telles que le nom de la carte réseau et le nom de la connexion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top