Limiter les ressources systèmes

yanipig Messages postés 28 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 12 décembre 2005 - 22 mai 2003 à 20:22
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009 - 2 déc. 2004 à 10:19
Bonjour à tous,

Je dois créer une app qui prend énormément de ressources ...
Je voudrais laisser la possibilité à l'utilisateur de limiter les ressources utilisées ...
Y a t il un message à envoyer à l'OS pour qu il réduise les ressources allouées a mon app?

Merci de votre temps

Yanipig
[mailto:yanipig@yahoo.fr mailto:yanipig@yahoo.fr]

2 réponses

desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009
16 nov. 2004 à 12:15
Tu peux choisir la quantité de RAM à allouer à la JVM (machine virtuelle JAVA) au lancement même de ton application par la commande : "java -Xms64m -Xmx512m -jar toto.jar" par exemple, ou la JVM réservera entre 64 et 512 Mo tant que le processus ne sera pas fini.

Pour vérifier la valeur par défaut de cette allocation, tu peux utiliser dans ton code les méthodes :

Process processus = runtime.getRuntime().maxMemory()

( ...ou .totalMemory() ou bien encore .freeMemory() ,etc... )
Elle est généralement assez faible (16Mo à 64Mo) et vu que tu dis avoir besoin de bcp de ressources, je crains que tu ne connaisse déjà cette astuce et que ce ne soit pas véritablement l'objet de ton post :

Il n'existe pas vraiment de moyen, à ma connaissance, pour modifier la RAM allouée à la JVM une fois ton processus lancé : Essayes peut-être toutefois de te renseigner à propos du Garbage Collector, ou des multi-THREADS, si ce n'est déjà fait ?

Pour ma part, j'ai réalisé une appli qui va au démarrage s'apercevoir si elle dispose ou non d'une dose de RAM inférieure à 64Mo et va alors en fonction proposer à l'utilisateur de changer cette dose (avec une jSlider) avant de se relancer elle-même avec au moins 65Mo cette fois : En procèdant de la sorte, peut-être peux-tu relancer ton appli sans perturber l'avancement du travail qu'elle est en train de fournir ?

Tu peux même envisager de sauver ce même travail temporairement sur le disque avec les nouvelles class d'entrée-sortie (nIO) qui sont plutôt efficaces, le temps du relancement ?

Cela semble un peu lourd et je serais heureux moi aussi d'apprendre qu'il y a plus simple et moins gourmand en ressources !

J'en profite pour rajouter une question à la tienne, car elle pourrait aussi s'avérer utile en temps voulu pour cette affaire :
Y aurait-il un moyen de déterminer la quantité totale de RAM présente sur le système via JAVA ?
( .totalMemory() et consoeurs ne donnent que les valeurs RAM attribuées à la JVM et pas celles du system hardware... )
Cela aiderait pour proposer un "long ramMax;" à l'utilisateur...
0
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009
2 déc. 2004 à 10:19
J'ai mis mon code qui permets donc de déterminer la RAM MAX d'une machine et de porposer à l'utilisateur le pourcentage qu'il veut allouer à la JVM, ici :

http://www.javafr.com/forum.v2.aspx?ID=292209&post=ok

Il ne te reste plus qu'à adapter en relançant l'appli automatiquement quand cela est nécéssaire avec les nouveaux paramètres, plutôt qu'en Manuel comme dans mon code...

Bonne chance ! ;)
0
Rejoignez-nous