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

C++ Discussion :

JVM memory /JNI


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    23
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par d�faut JVM memory /JNI
    Bonjour,

    j'ai d�velopp� un application c++(manag� car il est appel� par du code C#) qui appelle des m�thodes java effectuant des connection http. L'appel des m�thodes Java par le c++ est assur� par JNI. Je c�ee un JVM permettant de communiquer avec mes m�thodes Java.

    Mon probl�me est que dans la r�p�tition de ces appels j'ai un
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
     EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006da7af82, pid=3600, tid=1140
     
    Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0-b15 mixed mode windows-amd64)
    Problematic frame:
    V  [jvm.dll+0x35af82]


    Apres analyse, il semblerait que je d�passe la memoire de la JVM allou� de base.

    je sais qu'on peut augmenter la heap memory et autre JVM memory avec la ligne de commande:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    java -Xmxtaille souhaité ....
    Or moi je lance mon java � partir de Visual Studio et de JNI.

    Donc ma question est:

    Comment augmenter la taille m�moire de ma JVM quand j'utilise JNI?

    Merci d'avance de votre reponse

    Config:

    Windows Xp 64 bit
    Visual Studio Team System

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Je me pose quand m�me une question qui peut te paraitre stupide, mais...

    Pourquoi diantre avoir recours � java pour utiliser une connexion http alors qu'il existe un tas de biblioth�ques qui te permettent de le faire en c++, et qui t'�vitent la d�pendance suppl�mentaire envers tout ce qui est JVM et autre
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    23
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par d�faut
    Ta question n'est pas stupide. Mon application java ne fait pas une connection http pour rien. elle fait plus que ca. Sachant que je developpe dans un cadre professionelle, je n'allais pas rentrer dans les details et je vous ai donn� que les grandes lignes.

    Dites vous juste que j'ai une m�thode java qui fait un truc (entre autre faire une connection http)

  4. #4
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par d�faut
    Apres analyse, il semblerait que je d�passe la memoire de la JVM allou� de base.

    je sais qu'on peut augmenter la heap memory et autre JVM memory avec la ligne de commande:
    Je suis un peu sceptique ; si tu as des "access violations" c'est pas la JVM qui est � mettre en cause mais plutot ton code qui doit occasionner des plantages.
    Re v�rifie bien ton code pour voir si tout est bien initialis� , si tu utilises des pointeurs et qu'ils ne pointent pas sur du vide...
    Est-ce que tu g�res correctement les erreurs avec des exceptions ?
    Je ne suis pas sp�cialiste Java mais la JVM doit allouer de la m�moire � la demande et progressivement.

    j'ai d�velopp� un application c++(manag� car il est appel� par du code C#) qui appelle des m�thodes java effectuant des connection http.
    Si tu fais des connections http tu est presque oblig� de passer par une architecture multithreading afin de synchroniser les op�rations de connections.
    Est-ce que tu fais cela ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    23
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par d�faut
    Si tu fais des connections http tu est presque oblig� de passer par une architecture multithreading afin de synchroniser les op�rations de connections.
    Est-ce que tu fais cela ?
    Oui sachant que mon application c++ doit tourner sur VSTS, jai mis dans les option de mon projet "Multi-threaded Debug DLL (/MDd)".

    l'application java et sa JVM gere lui meme ses threads pour faire sa chose

    Sinon je tiens a signaler que le probl�me se produit lors de la repetition de l'appel de la m�thode java. C'est a dire que ca va marcher impec les 3 premiere fois puis au 4eme me mettre un acces violation. C'est pour ca que je soupconne sa memoire

  6. #6
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    A vrai dire, le but de mon intervention �tait de mettre en �vidence le fait qu'il est peut �tre... malsain de m�langer trop all�grement les diff�rents langages

    Je n'ai, a priori, rien contre le C# ni contre le java, mais je me demande s'il ne serait pas dans l'ensemble plus efficace de tout faire au choix en C++ (�ventuellement manag�), en C# ou en java...

    En effet, tu risques de tomber dans une "spirale infernale" dans laquelle tu finira par avoir un code C# qui appelle un code C++ manag�, qui appelle du java, qui appelle du C#, qui appelle du java (de nouveau) qui utilise du C++ manag�, et, cerise sur le g�teau, une partie en Ada ou en Cobol, tant qu'� faire...

    Je suis tout � fait d'accord avec le fait qu'il faut, autant que faire se peut, r�cup�rer l'existant, mais, comme cette r�cup�ration est visiblement la source de probl�mes qui sont dus en tout ou en partie au m�lange des langages et des technologies, je ne peux m'emp�cher de penser que tu t'�viterais bien des soucis en ne faisant pas de la "r�cup�ration � tout prix"
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  7. #7
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Tu as
    - lu le chapitre sur le multithreading et les JVM ?
    - pens� au fait que c'est � toi de nettoyer les r�f�rences locales que tu cr�es � la sortie des appels Java ?
    - pas oubli� que les r�f�rences locales ne peuvent traverser les barri�res de leur JNIEnv ?

    (je viens de pratiquer JNI dans un environnement monothread�, et quelle horreur, je me suis retrouv� 15 ans en arri�re dans un monde RAII-less)

    @koala, parfois pour des raisons contractuelles, ou autres, on n'a pas le choix que de m�langer ainsi les langages.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    23
    D�tails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par d�faut
    Le d�tails qui tue : je suis en 64 bits Vous allez me dire et alors?

    Ben je viens de faire le tests en 32 bits et ca fonctionne impeccablement

    Alors soit ya des option sur VSTS que je coche mal entre 32bits et 64 bits soit ya une particularit� cach�.

    En 64 bits jai un acces violation apres plusieurs repetition d'appel vers le Java (comme si je remplissais un buffer) et sur 32 bits ca roule

  9. #9
    Expert confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    D�tails du profil
    Informations personnelles :
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    A vrai dire, le but de mon intervention �tait de mettre en �vidence le fait qu'il est peut �tre... malsain de m�langer trop all�grement les diff�rents langages
    Je n'ai, a priori, rien contre le C# ni contre le java, mais je me demande s'il ne serait pas dans l'ensemble plus efficace de tout faire au choix en C++ (�ventuellement manag�), en C# ou en java...
    Pas mieux !
    M�langer des langages c'est pas tr�s bon sinon le projet devient trop h�t�rog�ne

  10. #10
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    En 64 bits jai un acces violation apres plusieurs repetition d'appel vers le Java (comme si je remplissais un buffer) et sur 32 bits ca roule
    Tu ne casterais pas des pointeurs en int ou d'autres choses du genre, � tout hasard ?

  11. #11
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Il y a aussi que la libjava peut �tre compil�e en 32 ou 64 bits, et il faut que celle utilis�e soit compatible avec le binaire produit.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. JNI malloc(): memory corruption
    Par manpe dans le forum Entr�e/Sortie
    R�ponses: 1
    Dernier message: 07/12/2009, 12h16
  2. JVM memory /JNI
    Par ti_angelo dans le forum Entr�e/Sortie
    R�ponses: 0
    Dernier message: 12/05/2009, 14h35
  3. [JNI]Fuite m�moire/ core dumped JVM
    Par kinder29 dans le forum Entr�e/Sortie
    R�ponses: 2
    Dernier message: 02/09/2008, 16h31
  4. R�ponses: 2
    Dernier message: 28/08/2008, 13h03
  5. [JNI] Cr�ation d'une jvm impossible
    Par Hannubis dans le forum MFC
    R�ponses: 10
    Dernier message: 27/03/2006, 17h31

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