java.lang.OutOfMemoryError, выброшенный из UncaughtExceptionHandler в потоке "main", для файла размером более 4 ГБ - PullRequest
0 голосов
/ 20 марта 2019

Используя этот инструмент, https://github.com/citygml4j/citygml-tools,, который называется to-cityjson. Я хочу преобразовать файл cityGML в файл cityJSON. Файл 4,36 ГБ, но я получаю следующую ошибку:

java.lang.OutOfMemoryError выбрасывается из UncaughtExceptionHandler в потоке main или

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)

Я нашел одно решение, которое заключалось бы в использовании java -Xmx15G, но я не знаю, как его реализовать.

Ответы [ 3 ]

2 голосов
/ 20 марта 2019

Вы можете использовать переменную окружения JAVA_OPTS или CITYGML_TOOLS_OPTS, которая читается исполняемым файлом citygml-tools.Или вы можете изменить параметр DEFAULT_JVM_OPTS в коде citygml-tools:

# 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"'

Если вы используете Linux, вы можете установить в терминале:

export JAVA_OPTS="-Xmx15G"
citygml-tools <file>
0 голосов
/ 20 марта 2019

Вы можете попробовать подход грубой силы и назначить очень большое здоровое пространство

Grep для строки

 defaultJvmOpts = ['-Xms1G'] 

только 1 ГиБ пространства кучи

Также сделатьуверен, что вы используете 64-битную Java и достаточно оперативной памяти

0 голосов
/ 20 марта 2019

java -Xmx6144M -d64

Перейдите в командную строку и выполните эту команду, для нее будет установлено значение 64 ГБ

Источник: Увеличение размера кучи в Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...