Options de l'interpreteur java ?

micquer Messages postés 19 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 15 octobre 2005 - 14 oct. 2005 à 00:43
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 15 oct. 2005 à 17:43
pour lancer l'execution d'un prog il existe des options mais MAL DOCUMENTEE meme sur "java in a nutshell" d' OREILLY !

-Xbatch
-Xmx ram
-Xms ram
-Xss taille
-Xincgc
-Xprof
-server
mon probleme :j'aimerais forcer la compilation de mon code pour avoir un .class + compact et + rapide ; donc j'aimerais connaitre les parametres adequats a fournir a ces options pour pouvoir gerer un max de clients qui vont se connecter a mon serveur;
***mon serveur est parametre pour dialoguer avec 2000 clients en simultane via des threads mais ca me provoque des erreurs "kava.lang.outOfMemory ..

SI VOUS AVEZ DEJA RENCONTRE CES PB MERCI D'AVANCE POUR VOS REPONSES ;


micquer

8 réponses

dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
14 oct. 2005 à 08:37
si se sont des pb de memoire, alors tu peux augmenter la heap size avec l'option -Xmx (specifie le max de heap size)

ex: java -Xms64m -Xmx512m etc... donne au demarage un minimum de
64Mo d'allocation pour ta heap size, jusqu'a un maximum de 512Mo (si tu
les a...)

par defaut, la heap size d'un jvm doit etre 64Mo si mes souvenirs sont bons...
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
14 oct. 2005 à 10:54
Attention tu confonds la compilation et l'exécution. Si tu veux avoir
un .class plus compact et plus rapide (les noms de variable et de
méthode sont plus courtes, etc ...) utilise un obfuscateur sinon
optimise ton code mais cela nécessite beaucoup de connaissances sur la
JVM ce qui apparemment n'est pas ton cas



De plus 'Java in a nutshell' n'étant pas une référence de la JVM c'est normal que tu ne trouve spas toutes les infos !

Pour les infos vas sur : java.sun.com



Cela veut dire que tu as 2000 Threads qui tourne ?? Une pour chaque
client ??? SI oui il faudrait que tu utilises une autres etchniques, un
peu plus compliqué mais pas insurmontable àmettre en place ..



ciao
0
micquer Messages postés 19 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 15 octobre 2005
14 oct. 2005 à 11:48
bj Dmaillet .

Xms initailise la java heap size ! (traduction le "tas" ? est ce equivalent a la zone memoire appellee "stack" ou pile dans la terminologie ancienne ?)

Xmx fixe le maximum heap size ! quelle est la valeur MAX ? j'ai essaye 1000 Mo et il ne m'a pas jete (alors meme que je n'ai que 1024 Mo de ram )

Xss =="set java thread stack size" ici on parle bien de stack !
===> QUEL est la relation avec la "heap size"

-server : cette option censee optimisee la JVM pour une appli de type server que fait elle specifiquement ?

-Xbatch == "disable backgroung compilation " option qui force la VM a executer toute la compilation juste a temps en arriere plan ....CA VEUT DIRE QUOI ????




micquer
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
14 oct. 2005 à 11:55
une bonne page vaut mieux que de long discours:

http://java.sun.com/docs/hotspot/VMOptions.html



et ecoute ce que dit Neodante, meme si je t'ai repondu (en interpretant...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
micquer Messages postés 19 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 15 octobre 2005
14 oct. 2005 à 12:12
bj Neodante.

*1* compilation & execution
java est il entierement interprete ou est il possible de le compiler pour avoir une excution + rapide ?

*2* obfuscateur :: C'EST QUOI ? as tu un exemple & un lien ?

*3* "Java in a nutshell"' c'est qd meme pas mal documente (1100pages et en FRANCAIS )=> pas d'erreur d'interpretation !!!

*4* << si tu veux avoir un .class plus compact et plus rapide (les noms de variable et de méthode sont plus courtes, etc ...>>
ai je bien compris ??? si j'utilise des noms + COURTS du style (a1,a2, ..b1,b2...x1,x2,..,aa1,...az1 ) ?????????

*5*mon appli serveur tourne sur un pc avec 1024 Mo et un AMD athlon XP 1800 ;je suis pret a recevoir 2000 clients max en creant un thread pour chacun lors de sa connection;
j'ai deja teste avec 1000 clients qui se connectent toute les 30 sec en envoyant un paquet de 100 octets que le serveur va ecrire ds des fichiers clients correspondants ;
mais j'ai des pb parfois de "out of memory " et je vois ds cartains cas que la taille du fichier d'echange grimpe au dela de mes 1024 Mo !!!

*6* j'utilise un autre pc similaire pour generer les clients; donc un client fait peu de job seulement l'envoi de messages (modifie par incrementation ..) ;
mon serveur lui analyse chaque message pour un traitement ulterieur (a la demande du gestionnaire ) et stocke donc chaque mesage du client _x ds 1 fichier _x





micquer
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
15 oct. 2005 à 14:51
lu

1- "java est il entierement interprete ou est il possible de le
compiler pour avoir une excution + rapide ?" Tu n'as pas dû bien
comprendre comment fonctionnait Java. Java ce n'est pas une boite noire
: tu fais ton fichier Toto.java, tu le compiles à l'aides de 'javac
Toto.java' en Toto.class et ensuite tu l'exécute avec 'java Toto'. Donc
compilation et exécution sont comme dans n'importe quel langage
indépendant l'un de l'autre ... tu sembles te mélanger les pinceaux ;-)
Oui Java est un langage interprété, et cette interprétation représente
son exécution.

Donc tu compiles et tu exécutes, pas plus pas moins !



2- Google est ton ami : http://www.preemptive.com/obfuscation-faq/fr/



3- Un bouqin qui ne fait que 1100 pages est loin de faire le tour d'une
technologie et surtout celle de Java ... Ce ne fait toujours pas de lui
une référence dans le domaine, surtout ce n'est pas le but de ce livre.
M'enfin à la limite on s'en fout !



4- Un serveur qui utilise des threads pour accueillir ses clients c'est
le truc de base que l'on trouve dans tous les bouquins de prog (j'en ai
même mis un ou deux sur javafr.com) mais ce n'est pas la bonne méthode
pour développer un serveur à forte contrainte de connexion. Je ne sais
po trop quel niveau tu as en Java, mais tu à l'air de tout juste
commencer, par conséquent je te donne la piste qui te servira à faire
cela. Utilises l'API NIO de Java ! Celle-ci permet d'avoir beaucoup
plus de performances et de controles sur des IO réseau et surtout d'une
façon assez bas niveau très similaire au C. Mais elle est également pas
simple à comprendre pour un débutant. Cherche sur Google comment :

- http://java.sun.com/j2se/1.4.2/docs/api/java/nio/package-summary.html

- http://javaalmanac.com/egs/java.nio/pkg.html



Mais bon courage car pour un débutant c'est vraiment pas simple à réaliser ni à comprendre !

ciao
0
micquer Messages postés 19 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 15 octobre 2005
15 oct. 2005 à 17:22
merci Neodante pour tes reponses .

j'ai bien compris que JAVAC est le compilateur du fichier source pour fabriquer du byte-code java ;
et que l'interpreteur JAVA lui execute ce byte-code java en generant des instructions machines natives au pc sur lequel il tourne .MAIS cependant il existe une option de l'interpreteur { -batch } qui dit ceci :

-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbatch disable background compilation

sur mon bouquin il est dit :: cela force la VM a execuetr toute la compilation juste a temps en arriere plan ; sinon sans cette option la VM compile les methodes en arriere plan pendant que la VM les interprete au premier plan !
j'en conclus donc qu'on peut faire avec cette option de la compilation de byte-code en instructions machines avant l'execution !!! QU'EN DIS TU ???



micquer
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
15 oct. 2005 à 17:43
Arf effectivement c'est ce que l'on appel la Compilation Just In Time
... dans ce cas fait ce que dit le livre mais attention la compilation
Just In Time permet d'accélérer les traitements mais uniquement dans le
cas où ceux seront appelé plusieurs fois de suite ... par défaut je
laisse par défaut, et laisse la JVM décider quand elle doit utiliser de
la compilation JIT ...



Voilà !



Mais le mieux que tu puisses faire : fais toi un benchmark en regardant
le temps d'exécution ... tu verras bien si ton appli s'en sort mieux en
JIT !! ;-)



++
0
Rejoignez-nous