Je cours un code pendant de longues heures dans le cadre d'un test de stress sur une base de données Oracle et en utilisant la version java "1.4.2". En un mot, ce que je fais est:Exception de mémoire insuffisante dans mon code
while(true)
{
Allocating some memory as a blob
byte[] data = new byte[1000];
stmt = fConnection.prepareStatement(query); // [compiling an insert query which uses the above blob]
stmt.execute(); // I insert this blob-row in the database.
stmt.close();
}
Maintenant, je veux exécuter ce test pour 8-10 heures. Cependant apparemment après avoir inséré environ 15 millions d'enregistrements, j'ai frappé le java.lang.OutOfMemoryError
Je cours ceci avec -Xms512m -Xmx2g. J'ai essayé d'utiliser des valeurs plus élevées, mais je ne semblent avoir que beaucoup de matériel ni ce que je pense qu'il est req:
java -Xms512m -Xmx4g -jar XX.jar
Invalid maximum heap size: -Xmx4g
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.
java -Xms2g -Xmx3g -jar XX.jar
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
Je lance cela comme un programme multithread. Donc 10 fils font les inserts.
Y at-il un moyen de contourner ce programme d'une manière peut-être pas hack. Je veux dire que si je décide de courir cela pendant 15-20 heures au lieu de 8-10 heures.
EDIT: ajouté stmt.close puisque je l'utilise déjà dans mon code. quelques changements en fonction des commentaires
Merci
PS: désolé cant afficher le bec de code de NDA
Avez-vous vérifié la limite stricte de votre système pour les processus? Vous pouvez les vérifier avec limite ou ulimit selon le shell que vous utilisez. – Pirooz
"Vous pensez"? Sortez votre profileur et voyez ce qui se passe réellement. –
l'exception pointe sur la ligne de code où je fais octet [] data = new byte [1000]; – codeObserver