IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Informations systèmes (processuers, mémoire vive.)


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    storm_2000
    Invité(e)
    Par défaut Informations systèmes (processuers, mémoire vive.)
    Bonjour,

    je suis à la recherche d'une API Java permettant de récupérer les informations:
    - Mémoire vive
    - Vitesse des CPUs
    ...

    Bien sur vous allez me dire que le JDK permet de récupérer les valeurs normalement sauf que je veux une API plus puissante. Celle du JDK ne marche pas à 100% entre les OS...

    merci.

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 094
    Par défaut Il y a comme qui dirait un couac
    Bonjour,

    Le langage Java est destiné à l'élaboration d'application en faisant abstraction du système d'exploitation hôte. Il est donc normal, et évident que ce dernier ne sache pas réaliser d'opération 'bas niveau' spécifique à chaque OS.
    Si vous ne pouvez écrire vous même (dans un autre langage, généralement le C) un petit programme exécutable depuis la ligne de commande de l'os qui fabrique un fichier texte résumant le relevé des informations recherchées, logiquement, dans les OS on trouve des exécutables, ou des scripts qui permettent un sysinfo. Vous avez deux solutions :
    La plus simple à mon sens est de repérer quels exécutables/scripts lancer pour tous les OS sur lesquels votre code sera amené à s'exécuter, puis de récupérer l'identité de l'OS hôte dans les properties de la JVM afin de déterminer lequel lancer. Généralement, ces exécutables produisent un fichier texte. Votre code devra simplement attendre que ce fichier texte soit produit pour ensuite l'exploiter. Pour lancer le 'récupérateur d'information' depuis votre code, un simple Runtime.exec fera l'affaire.
    La seconde solution, c'est d'utiliser JNA. Une API java qui permet d'invoquer les fonctions natives des OS hôtes. Mais dans ce cas, il va vous falloir connaître toutes les fonctions (dlls pour windows, librairies so pour linux, etc...) a invoquer pour découvrir les infos que vous recherchez.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    storm_2000
    Invité(e)
    Par défaut
    Citation Envoyé par pursang Voir le message
    Bonjour,

    Le langage Java est destiné à l'élaboration d'application en faisant abstraction du système d'exploitation hôte. Il est donc normal, et évident que ce dernier ne sache pas réaliser d'opération 'bas niveau' spécifique à chaque OS.
    Si vous ne pouvez écrire vous même (dans un autre langage, généralement le C) un petit programme exécutable depuis la ligne de commande de l'os qui fabrique un fichier texte résumant le relevé des informations recherchées, logiquement, dans les OS on trouve des exécutables, ou des scripts qui permettent un sysinfo. Vous avez deux solutions :
    La plus simple à mon sens est de repérer quels exécutables/scripts lancer pour tous les OS sur lesquels votre code sera amené à s'exécuter, puis de récupérer l'identité de l'OS hôte dans les properties de la JVM afin de déterminer lequel lancer. Généralement, ces exécutables produisent un fichier texte. Votre code devra simplement attendre que ce fichier texte soit produit pour ensuite l'exploiter. Pour lancer le 'récupérateur d'information' depuis votre code, un simple Runtime.exec fera l'affaire.
    La seconde solution, c'est d'utiliser JNA. Une API java qui permet d'invoquer les fonctions natives des OS hôtes. Mais dans ce cas, il va vous falloir connaître toutes les fonctions (dlls pour windows, librairies so pour linux, etc...) a invoquer pour découvrir les infos que vous recherchez.
    Il n'y a donc aucune fondation, groupe ou autre qui à écris une librairie JNA / JNI avec l'implémentation pour plusieurs OS ? Je ne veux pas réinventer la roue ou apprendre le fonctionnement de tout les OS pour ca.

    Des personnes m'ont dit que si mais il ne connaissent pas le nom.

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 094
    Par défaut Très bien
    Désolé de vous décevoir, mais vous savez, les personnes qui disent avoir vues l'homme qui a vu l'homme qui a vu l'ours....
    En effet, vous l'avez compris, mettre en œuvre une telle API représente un travail conséquent, et la maîtrise de quasiment tous les systèmes d'exploitation. Je ne prétendrai pas connaître toutes les API disponibles sur le net, mais vue le travail à réaliser, il m'étonnerait fortement d'en trouver une gratuite, il ne faut pas exagérer quand même.
    Bref, si on fait une petite réflexion, on remarque qu'en assumant windows, Linux et Mac OSX, on couvre à mon avis 99% des postes utilisateurs. Les autres OS concernent plutôt les développeurs, les administrateurs système et réseau. Pour ce qui est de Windows, il existe un exécutable "gratuit" nommé aida 32 que l'on peut trouver sur le net et qui permet d'être lancé en ligne de commande MS-DOS. Il produit alors un fichier avec plusieurs formats disponibles : txt, xml, html, etc... qui résume les informations de configurations d'un poste. Les informations sont cataloguées par thème et on peut passer des paramètres à aida pour qu'il relève seulement ceux qui nous intéresse.
    Pour ce qui est des systèmes type unix, c'est différent. En effet, ces derniers maintiennent leur configuration dans des fichiers scripts, donc des fichiers texte. Il suffit de savoir lesquels sont concernés par le relevé que l'on désire faire, et d'apprendre à interpréter leur contenu pour en extraire la configuration. Sous linux, il existe un script 'natif' qui fait ce travail : "lshw", je ne l'ai pas vérifié, mais comme Mac OSX est basé il me semble sur Debian, cela ne m'étonnerait pas que cette commande fonctionne aussi sous Mac OSX. Quoi qu'il en soit, bon courage...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Malgre tout, il est possible de récupérer certaines informations systèmes via l'API publique et via l'API privée Java :

    • Les propriétés systèmes permettent de lister quelques informations basiques ; voir System.getProperties() ou aussi la classe Runtime. Attention certaines propriétés retournée, notamment celle qui indique la bitness de la machine -32 ou 64-bit-, est limitée par le JRE utilise (ainsi un JRE 32-bits retournera toujours 32-bit même sur une machine 64-bit). Idem pour la quantité de RAM disponible.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      public class Main {
        public static void main(String[] args) {
          /* Total number of processors or cores available to the JVM */
          System.out.println("Available processors (cores): " + 
              Runtime.getRuntime().availableProcessors());
       
          /* Total amount of free memory available to the JVM */
          System.out.println("Free memory (bytes): " + 
              Runtime.getRuntime().freeMemory());
       
          /* This will return Long.MAX_VALUE if there is no preset limit */
          long maxMemory = Runtime.getRuntime().maxMemory();
          /* Maximum amount of memory the JVM will attempt to use */
          System.out.println("Maximum memory (bytes): " + 
              (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));
       
          /* Total memory currently in use by the JVM */
          System.out.println("Total memory (bytes): " + 
              Runtime.getRuntime().totalMemory());
       
          /* Get a list of all filesystem roots on this system */
          File[] roots = File.listRoots();
       
          /* For each filesystem root, print some info */
          for (File root : roots) {
            System.out.println("File system root: " + root.getAbsolutePath());
            System.out.println("Total space (bytes): " + root.getTotalSpace());
            System.out.println("Free space (bytes): " + root.getFreeSpace());
            System.out.println("Usable space (bytes): " + root.getUsableSpace());
          }
        }
      }
    • La classe privee com.sun.management.OperatingSystemMXBean permet egalement de recuperer des infos systeme (les meme contraites s'appliquent).

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
       
      import com.sun.management.OperatingSystemMXBean;
      import java.lang.management.ManagementFactory;
       
      OperatingSystemMXBean info = (OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
      Voir :


      Attention cette classe n'est probablement pas disponible dans les JRE non-Sun/Oracle.
    • Suivant ton OS tu peux lancer des commandes SH, Bash ou VBscript interrogeant l'OS via des commandes Linux ou Windows et parser/en interpréter le résultat (il va falloir Googleliser pour trouver ces commandes ou demander dans les forum appropries).
    • JNI ou JNA avec la même remarque, il te faudra aller fouiller pour savoir quelles commandes/fonction appeler dans ta lib native.
      M'est avis que des gens ont déjà fait de la doc sur ça, faut passer un certain temps a Googleliser.


    Le multiplateforme n'est bien souvent qu'une piètre excuse invoquée a tout va a tord et a raison.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Informations durablement en mémoire vive
    Par Sergejack dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/09/2011, 11h25
  2. Informations système ?
    Par Neilos dans le forum Windows
    Réponses: 3
    Dernier message: 12/08/2005, 15h07
  3. Processus Sql Server prend toute la mémoire vive
    Par cracosore dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 19/02/2004, 17h53
  4. [API] mémoire vive
    Par Halleck dans le forum Windows
    Réponses: 8
    Dernier message: 29/01/2004, 00h17
  5. Utilisation de la mémoire vive....
    Par Neilos dans le forum Windows
    Réponses: 9
    Dernier message: 24/11/2003, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo