À 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 >
3 Réponses :
java -Xmx6144M -d64
Accédez à la ligne de commande et exécutez cette commande, elle la définira sur 64 Go
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"'
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.
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
Sans rapport avec OOME, l'OP sait comment y remédier. Il s'agit de
citygml-tools