1
votes

java.lang.OutOfMemoryError renvoyé par UncaughtExceptionHandler dans le thread "main" 'pour un fichier de plus de 4 Go

À l'aide de cet outil, https://github.com/citygml4j/citygml-tools , qui s'appelle to-cityjson. Je souhaite convertir un fichier cityGML en un fichier cityJSON . Le fichier fait 4,36 Go, mais j'obtiens l'erreur suivante:

java.lang.OutOfMemoryError lancé depuis le UncaughtExceptionHandler dans le thread main ou

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at jdk.internal.reflect.GeneratedConstructorAccessor183.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at com.sun.xml.bind.v2.ClassFactory.create0(ClassFactory.java:102)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.createInstance(ClassBeanInfoImpl.java:255)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.createInstance(UnmarshallingContext.java:672)
    at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.startElement(StructureLoader.java:158)
    at com.sun.xml.bind.v2.runtime.unmarshaller.ProxyLoader.startElement(ProxyLoader.java:30)
    at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$IntercepterLoader.startElement(ElementBeanInfoImpl.java:223)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:547)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:526)
    at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:45)
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:216)
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:150)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:385)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:356)
    at org.citygml4j.builder.jaxb.xml.io.reader.JAXBSimpleReader.nextFeature(JAXBSimpleReader.java:133)
    at org.citygml4j.tools.command.ToCityJSONCommand.execute(ToCityJSONCommand.java:133)
    at org.citygml4j.tools.CityGMLTools.handleParseResult(CityGMLTools.java:102)
    at org.citygml4j.tools.CityGMLTools.handleParseResult(CityGMLTools.java:35)
    at picocli.CommandLine.parseWithHandlers(CommandLine.java:1526)
    at org.citygml4j.tools.CityGMLTools.main(CityGMLTools.java:44)

J'ai trouvé une solution, qui serait d'utiliser java -Xmx15G , mais je ne sais pas comment l'implémenter. p >


1 commentaires

Sans rapport avec OOME, l'OP sait comment y remédier. Il s'agit de citygml-tools


3 Réponses :


0
votes

java -Xmx6144M -d64

Accédez à la ligne de commande et exécutez cette commande, elle la définira sur 64 Go

Source: Augmenter la taille du tas en Java


0 commentaires

2
votes

Vous pouvez utiliser la variable d'environnement JAVA_OPTS ou CITYGML_TOOLS_OPTS qui est lue par l'exécutable citygml-tools . Ou vous pouvez modifier l'option DEFAULT_JVM_OPTS dans le code citygml-tools :

export JAVA_OPTS="-Xmx15G"
citygml-tools <file>

Si vous utilisez Linux, vous pouvez définir dans le terminal :

# Add default JVM options here. You can also use JAVA_OPTS and CITYGML_TOOLS_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xms1G"'


2 commentaires

Je pense que cela fonctionnera, mais l'ordinateur s'éteint après 10 minutes. Cela peut-il être dû à une mémoire RAM insuffisante (qui fait 4 Go, ce qui est inférieur au fichier 4,36 Go)?


@karin si l'ordinateur est en train de s'éteindre est probablement un crash logiciel ou une surchauffe. Vous auriez à le déboguer, aucun moyen de le dire.



0
votes

Vous pouvez essayer une approche de force brute et attribuer un très grand espace sain

Grep pour la ligne

 defaultJvmOpts = ['-Xms1G'] 

seulement 1 Gio d'espace de tas

Assurez-vous également que vous utilisez un Java 64 bits et que vous avez suffisamment de RAM


0 commentaires