6
votes

Allocation de mémoire pour application WebStart Java

J'utilise une application Java WebStart appelée blast2Go Je rencontre des problèmes de mémoire allocation. Il doit charger une grande définition de données dans la mémoire. J'ai donc essayé d'allouer 3-6 Go à cette application. Cependant, peu importe ce que j'ai défini comme la taille maximale du tas, il utilise toujours 455 Mo (comme indiqué par la barre de messages: 'Usage de la mémoire: XXMB de 455 Mo'). J'ai essayé de la définir à des niveaux très raisonnables (1024 Mo), mais seulement 455 Mo sont seulement de 455 Mo sont une allocation.

Des idées? P>

BTW, j'utilise Ubuntu 10.04 32 bits avec une mémoire de 24 Go, 8 Procs. P>

Mise à jour forte>: Voici le JNLP qu'ils fournissent. Je reçois le même résultat lorsque je modifierai les valeurs du Taille initiale-Heap-Taille Code> et Max-Heap-Taille Code> Attributs. P>

> javaws blast2go3GB.jnlp 
Error occurred during initialization of VM
CCoouulldd  nnoott  crreesaetrev et heen oJuagvha  svpiarcteu aflo rm aocbhjiencet. 
heap


6 commentaires

Comment indiquez-vous combien de mémoire vous voulez?


J'utilise le lien qu'ils fournissent et spécifient combien je veux.


Il suffit de faire la même chose: la ligne est pour 2048 entré.


Sur mon Mac (avec 5 Go de mémoire JVM et 64 bits), la ligne est "Utilisation de la mémoire: 18 Mo de 2043MB". J'essaierais une machine de 64 bits.


Oui, j'ai édité cette ligne. Tout ce que j'ai mis pour la taille du tas initial et la taille maximale du tas, il est toujours de 455 Mo.


Je suis exécuté Windows Vista 64-Bits avec 4 Go de RAM, un JVM 32 bits. J'ai sélectionné la liaison de 1500 Mo et la barre d'état est "Utilisation de la mémoire: 29 Mo de 1450 Mo"


6 Réponses :


3
votes

Si vous exécutez un Linux 32 bits, vous ne pouvez exécuter qu'un JVM 32 bits, qui est limité à environ 4 Go de mémoire par instance. Je crois que c'est aussi le cas même si vous avez plus visible pour le noyau.

Si vous avez vraiment besoin de beaucoup de mémoire dans un seul JVM, vous devez aller 64 bits.


EDIT: Java WebStart n'était pas ouvert sur OpenJDK afin qu'une mise en œuvre alternative soit utilisée. Essayez de télécharger et d'utiliser Sun Java pour cela à la place. Il devrait être suffisant pour télécharger et décompresser le JDK et exécuter bin / javaws foo.jnlp.


7 commentaires

C'est génial, mais pourquoi seulement 455 Mo est alloué quand je demande, disons, 1024 Mo?


Vous pouvez le faire de mal, et c'est le comportement par défaut. Ou cela vous donne simplement ce que ça peut. Difficile à dire - montrer du JnLP.


OK, JNLP vient de la page liée. Voir les commentaires à la question.


Le résultat est le même si je modifie le JNLP qu'ils fournissent ou non. Je le posterai cependant.


@Thorbjorn c'était définitivement la version javaws . Je ne savais pas que Ubuntu n'utilisait pas Sun Java. J'ai téléchargé / déballé le dernier JDK. Cela me donne la mémoire que je demande quand elle est disponible et des messages d'erreur utiles lorsque j'essaie d'allouer trop. Merci!


@Daniel, vous êtes les bienvenus. Quelle est la quantité maximale de mémoire que vous pouvez obtenir?


Agréable. Ne penserais pas que vous utilisez OpenJDK. :) BTW, vous pouvez activer un repo "partenaires" à Ubuntu et obtenir Sun-Java. Vous n'avez pas besoin de télécharger et de déballer rien manuellement.



4
votes

Vous pouvez spécifier la taille du tas dans la balise J2SE comme ceci: xxx

et spécifier chaque version JRE que vous utiliseriez.


2 commentaires

À la connaissance de je suis au courant, je n'ai qu'un jre sur le système. Le fichier .jnlp qu'ils a créé n'avaient qu'une seule balise J2SE et il disposait de version 1.5 + . Je cours 1.6.0_18 sur mon système, de sorte que cela devrait être couvert.


@Daniel Avez-vous essayé d'exécuter votre application sans JNLP (de la ligne de commande Java -Jar MyApp.jar -xms1024m -xmx3000m) Avez-vous le même problème lors de l'exécution de la ligne de commande?



1
votes

Avez-vous essayé la solution à partir du page de démarrage Blast2Go ?

"blast2Go a besoin de plus de mémoire? Utilisez l'URL de la mémoire dynamique JNLP:" em> p> BlockQuote>

http://bioinfo.cipf.es/blast2go/webstart/makeJnlp.php?mem=<put here the amount of memory you need>


2 commentaires

Ils viennent de mettre le numéro dans le bon endroit du JNLP. Rien d'extraordinaire.


C'est ce que j'ai utilisé tout le long. Peu importe ce que je mets pour la quantité de mémoire, je reçois seulement 455 Mo.



2
votes

Essayez de le définir à l'aide d'un paramètre de ligne de commande manuelle. Quelque chose comme ceci:


0 commentaires

0
votes

Dans la production, si le client souhaite personnaliser la taille du tas Java en JNLP en fonction de la configuration système disponible (Taille de la RAM sur la machine client)

Modifications de l'application_template.jnlp: Utilisez * pour accepter les valeurs configurables

Changements dans l'appliation.jnlp:

transmettez les valeurs réelles à la taille de la taille initiale et de la taille maximale. Le fichier JNLP prend en charge les scripts et les expressions.

  • à l'aide de Scriptlet <%%> Lisez le fichier de propriétés pour les valeurs configurées
  • passez l'expression <% => pointant sur les valeurs réelles à la taille du tas entravent et Max-Heap-Taille


0 commentaires

2
votes

Vous pouvez le modifier simplement via une option de ligne de commande, par exemple xxx


0 commentaires