La façon de traiter avec “java.lang.OutOfMemoryError: Java heap space” d'erreur?

Je suis en train d'écrire un côté client Swing application graphique (concepteur de la police) sur Java 5. Récemment, je suis en cours d'exécution dans java.lang.OutOfMemoryError: Java heap space erreur parce que je ne suis pas d'être prudente sur l'utilisation de la mémoire. L'utilisateur peut ouvrir un nombre illimité de fichiers, et le programme garde le ouvert les objets dans la mémoire. Après une rapide recherche, j'ai trouvé L'ergonomie de la version 5.0 de Java Virtual Machine et les autres disent sur la machine Windows, la JVM par défaut max taille de segment de mémoire comme 64MB.

Compte tenu de cette situation, comment dois-je faire avec cette contrainte?

Je pourrais augmenter le max de la taille du segment à l'aide de ligne de commande option pour java, mais cela nécessiterait de déterminer la quantité de RAM disponible et l'écriture de lancement du programme ou d'un script. En outre, l'augmentation de certains finis max n'a pas en fin de compte se débarrasser de la question.

Je pourrais réécrire certains de mon code pour conserver les objets de système de fichiers fréquemment (à l'aide de la base de données est la même chose) pour libérer de la mémoire. Il pourrait fonctionner, mais il est sans doute beaucoup trop de travail.

Si vous pouviez m'indiquer les détails de ci-dessus des idées ou des solutions de rechange comme automatique de la mémoire virtuelle, l'extension de la taille du segment de manière dynamique, qui sera grande.

  • La valeur par défaut max taille du segment de mémoire de 64 MO est un avant J2SE 5.0. Pour J2SE 8.0 informations, voir "Garbage Collector "Ergonomie" dans le docs.oracle.com/javase/8/docs/technotes/guides/vm/... .
  • Si vous avez atterri ici parce que chaque OOM question est dupe de celui-ci, assurez-vous de consulter aussi: stackoverflow.com/questions/299659/... Il fournit la solution pour le nettoyage de la mémoire des références "juste à temps" avant le OOM. SoftReferences peut être l'outil qui permet de résoudre votre problème.