Bonjour,

J'ai une tâche ANT qui est censé compilé un certain nombre important de module FLEX (environ 150). Le script fonctionne super bien. Malheureusement après une quarantaine de compilation je tombe sur la fameuse PermGen spaec erreur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Loading configuration file C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\3.4.0\frameworks\flex-config.xml
Error: PermGen space
 
java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at flex2.compiler.swc.catalog.CatalogReader$LibraryReader.readElement(CatalogReader.java:295)
        at flex2.compiler.swc.catalog.CatalogHandler.startElement(CatalogHandler.java:42)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
        at flex2.compiler.swc.catalog.CatalogReader.read(CatalogReader.java:89)
        at flex2.compiler.swc.Swc.read(Swc.java:428)
        at flex2.compiler.swc.Swc.<init>(Swc.java:91)
        at flex2.compiler.swc.SwcCache.getSwc(SwcCache.java:224)
        at flex2.compiler.swc.SwcCache.getSwcs(SwcCache.java:190)
        at flex2.compiler.swc.SwcCache.getSwcGroup(SwcCache.java:86)
        at flex2.compiler.swc.SwcCache.getSwcGroup(SwcCache.java:75)
        at flex2.compiler.CompilerSwcContext.load(CompilerSwcContext.java:81)
        at flex2.tools.Compiler.mxmlc(Compiler.java:147)
Donc J'ai bien ajouté les valeurs suivantes à MAVEN_OPTS

Code : Sélectionner tout - Visualiser dans une fenêtre à part
-DXmx=1024m -DXms=1024m -DXX:MaxPermSize=786m
Avec et sans le D avant le -. le souci est que j'ai l'impression que mon paramètre n'est pas pris en compte car je plante toujours au alentour du même swf à compiler.

L'idée serait de découper ma compilation en plusieurs build et de pouvoir vider la Permgen entre chaque lancement de build. Je lance les targets ANT à partir de MAVEN. Pour mes tests, j'ai enlevé la partie MAVEN pour être sur que cela ne venait de là mon souci.

Donc la solution serait un truc du genre :
Lancement Maven
=> Lancement build1.xml
=> Vidage de la PermGen gràce à la commande magique
=> Lancement build1.xml
=> Vidage de la PermGen gràce à la commande magique
=> Lancement build3.xml

Une autre piste est d'utiliser le fork pour allouer plusieurs JVM mais je ne sais pas comment détecter la fin du traitement.

Si une bonne âme peut m'aider ce serait trop sympa.
Merci d'avance.