2010-04-27 6 views
0

J'utilise une application Java qui vous permet d'importer des fichiers personnalisés. À l'importation, ces fichiers sont chargés en mémoire.Définir la mémoire maximale de la machine virtuelle de l'application Java sans accéder aux paramètres de la machine virtuelle à cause du programme de lancement personnalisé?

Le problème est que les fichiers que je veux importer sont très gros, cela provoque une exception OutOfMemory. Le journal de crash m'informe également que la VM a été démarrée avec le paramètre java "-Xmx512m", je veux changer cela en "-Xmx1024m" pour que je double la mémoire disponible.

Le problème est que cette application utilise son propre dossier JRE et qu'il y a un lanceur écrit en C qui appelle le fichier jvm.dll. De toute façon, java.exe ou javaw.exe ne sont jamais appelés et donc je ne peux pas définir ces paramètres moi-même (si je supprime ces exécutables ce n'est pas grave, peut toujours exécuter l'application - ce n'est pas le cas avec la DLL). Donc, ma question est, puis-je définir ce paramètre VM d'une autre manière? Je suis même prêt à modifier les fichiers JRE s'il n'y a pas d'autre moyen.

Mise à jour: Trouvé quelques informations supplémentaires:

JVM_ARGS: -Djava.system.class.loader = com.company.loader.NativeClassLoader -Xmx160m -Xms160m -Xincgc

java_command: inconnu

Type de lanceur: générique

+0

Par anychance n'est pas le lanucher "LaunchAnywhere"? Parce que cela contient un fichier .lax où vous pouvez configurer cela. – OscarRyz

+0

Regardé à travers les fichiers et il n'y a pas de fichier de configuration, malheureusement. – Tom

Répondre

1

Il serait probablement préférable d'essayer d'éliminer le lanceur à l'aide d'une machine virtuelle Java standard. Voyez si vous pouvez déterminer avec quels paramètres Java est lancé - cela pourrait aider à vider le lanceur et tous les fichiers de configuration associés.

Ensuite, vous appelez Java vous-même.

Cela peut ne pas fonctionner du tout selon ce que fait le lanceur.

modifier:

essayer:

java -Djava.system.class.loader=com.company.loader.NativeClassLoader -Xmx160m -Xms160m -Xincgc 

de la ligne de commande contre une véritable machine virtuelle Java. Il y a de fortes chances que cela échoue à cause du NativeClassLoader ou d'autres éléments mis en place par le chargeur Java.

Il se peut que la classe Java actuelle soit en train de démarrer (je ne sais pas si "NativeClassLoader" a besoin de la classe principale actuelle ou non). Sans savoir plus sur le chargeur de classe C, je ne sais pas si quelqu'un peut vous aider beaucoup. Peut-être pourriez-vous contacter le vendeur? Vous pouvez vider le fichier .exe et voir s'il y a un texte d'identification - si vous pouviez trouver d'où il vient, vous pourriez être capable de trouver des docs dessus pour vous dire comment transférer les paramètres à la JVM

+0

Comment ferais-je cela? J'ai mis à jour mon message avec les paramètres de la machine virtuelle. – Tom

+0

J'ai essayé votre mise à jour, n'a pas fonctionné malheureusement. Le lanceur fait beaucoup plus de choses qu'il n'y paraît. Je me demande si ces paramètres sont gérés par les fichiers .class dans le JRE? Si oui, je pourrais essayer de les modifier avec les fichiers sources disponibles dans un JDK. – Tom

+0

J'ai résolu le problème en éditant hexadécimal le lanceur. – Tom