Lorsque je crée un nouveau projet dans "Eclipse" IDE. Soudain, il affiche un message d'alerte "Erreur de mémoire insuffisante". Je ne peux pas identifier la raison. Si quelqu'un connaît la raison, dites-le moi.
Essayez de démarrer Eclipse avec les paramètres suivants:
Eclipse.exe -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m
Ou justifiez ces paramètres pour vos besoins
Si vous exécutez Eclipse sur Mac OS X,
Clic droit sur Eclipse.app
icône
Cliquer sur Show Package Contents
Ouvert Eclipse.ini
fichier
Modifier les paramètres ci-dessous
-Xms512m
-Xmx3000m (Hoping your developer box has >4GB of memory)
Ajouter les paramètres ci-dessous
-XX:PermSize=256m
-XX:MaxPermSize=512m
L'explication la plus évidente est que vous êtes vraiment à court de mémoire. Dans ce cas, démarrer Eclipse avec un tas plus gros devrait aider
-vmargs -Xmx256M
variant le 256M pour voir ce qui fonctionne pour vous.
Je ne m'attendrais pas à voir ce problème si vous n'avez que quelques projets simples. Si vous utilisez des plugins supplémentaires, il est possible que la quantité de tas dont vous avez besoin doive être augmentée.
Avant
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
256m
Après:
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
512m
Je ne sais pas si cela est pertinent pour votre problème, mais je viens d'avoir un problème similaire avec un projet Swing utilisant OpenJDK 7.
Après plusieurs cycles de démarrage (le bouton Run
) et de fermeture ('X'
/Alt+F4
) mon application, j'ai eu cette erreur dans la console:
Exception in thread "main" Java.lang.OutOfMemoryError: unable to create new native thread
at Java.lang.Thread.start0(Native Method)
at Java.lang.Thread.start(Thread.Java:691)
at Sun.awt.AWTAutoShutdown.activateBlockerThread(AWTAutoShutdown.Java:334)
at Sun.awt.AWTAutoShutdown.notifyPeerMapUpdated(AWTAutoShutdown.Java:215)
at Sun.awt.AWTAutoShutdown.registerPeer(AWTAutoShutdown.Java:348)
at Sun.awt.SunToolkit.targetCreatedPeer(SunToolkit.Java:313)
at Sun.awt.X11.XToolkit.createFrame(XToolkit.Java:410)
at Java.awt.Frame.addNotify(Frame.Java:477)
at Java.awt.Window.show(Window.Java:1031)
at Java.awt.Component.show(Component.Java:1651)
at Java.awt.Component.setVisible(Component.Java:1603)
at Java.awt.Window.setVisible(Window.Java:1014)
at tool.BAT.main(BAT.Java:11)
Et parfois, j'ai une autre sorte d'erreur:
Error occurred during initialization of VM
Java.lang.OutOfMemoryError: unable to create new native thread
puis, si j'ai essayé de l'exécuter une fois de plus, Java s'est écrasé:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000000000000000, pid=30388, tid=139776854689536
#
# JRE version: 7.0_07-b30
# Java VM: OpenJDK 64-Bit Server VM (23.2-b09 mixed mode linux-AMD64 compressed oops)
# Problematic frame:
# C 0x0000000000000000
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/mcmlxxxvi/workspace/bat/hs_err_pid30388.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
# http://icedtea.classpath.org/bugzilla
#
top
a révélé la cause du problème (remarquez l'utilisation de la mémoire virtuelle):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30619 mcmlxxxv 20 0 3271m 390m 45m S 2.0 13.0 0:38.88 Java
30667 mcmlxxxv 20 0 2172m 35m 12m S 0.3 1.2 0:01.00 Java
30688 mcmlxxxv 20 0 2172m 35m 12m S 0.3 1.2 0:00.96 Java
30710 mcmlxxxv 20 0 2172m 35m 12m S 0.0 1.2 0:00.97 Java
Ce sont tous des cas de ma demande, qui n'ont pas été fermés. Vous ne savez toujours pas pourquoi tant de mémoire virtuelle a été allouée par instance - il existe probablement une option pour cela. (J'ai d'ailleurs 3 Go de mémoire physique).
Voici ma méthode main ():
public static void main(String[] args) {
JFrame frame = new JFrame();
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}
J'ai vu la ligne commentée dans un didacticiel et l'ai spécifiquement désactivée pour voir ce qui se passerait. Ce qui s'est passé, c'est qu'il est par défaut à HIDE_ON_CLOSE
, qui n'a pas fermé et éliminé le cadre.
Régler setDefaultCloseOperation
sur EXIT_ON_CLOSE était la solution pour moi. Intéressé de voir les commentaires de personnes plus compétentes à ce sujet, cependant.