Java Heap space при выполнении .jar-файла из командной строки [duplicate]

Это моя версия для Swift 3 / Swift 4.

Объяснение того, что происходит в коде.

Это по существу тот же ответ, что и Sh_Khan's. Но в его примере пользователь уже знает путь к ведро. В моем примере мы получаем путь от задачи загрузки. Именно это и привело меня к этому вопросу, а также то, что, как мне кажется, искал, когда он искал замену metadata.downloadURL().

class StorageManagager {


    private let storageReference: StorageReference

    init() {

        // first we create a reference to our storage
        // replace the URL with your firebase URL
        self.storageReference = Storage.storage().reference(forURL: "gs://MYAPP.appspot.com")
    }

    // MARK: - UPLOAD DATA
    open func uploadData(_ data: Data, named filename: String, completion: @escaping (URL? , Error?) -> Void) {

        let reference = self.storageReference.child(filename)
        let metadata = StorageMetadata()
        metadata.contentType = "ourType" // in my example this was "PDF"

        // we create an upload task using our reference and upload the 
        // data using the metadata object
        let uploadTask = reference.putData(data, metadata: metadata) { metadata, error in

            // first we check if the error is nil
            if let error = error {

                completion(nil, error)
                return
            }

            // then we check if the metadata and path exists
            // if the error was nil, we expect the metadata and path to exist
            // therefore if not, we return an error
            guard let metadata = metadata, let path = metadata.path else {
                completion(nil, NSError(domain: "core", code: 0, userInfo: [NSLocalizedDescriptionKey: "Unexpected error. Path is nil."]))
                return
            }

            // now we get the download url using the path
            // and the basic reference object (without child paths)
            self.getDownloadURL(from: path, completion: completion)
        }

        // further we are able to use the uploadTask for example to 
        // to get the progress
    }

    // MARK: - GET DOWNLOAD URL
    private func getDownloadURL(from path: String, completion: @escaping (URL?, Error?) -> Void) {

        self.storageReference.child(path).downloadURL(completion: completion)
    }

}
235
задан Joachim Sauer 22 March 2016 в 16:10
поделиться

11 ответов

Вы можете увеличить до 4 ГБ на 32-битной системе. Если вы используете 64-битную систему, вы можете пойти выше. Не нужно беспокоиться, если вы выбрали неверно, если вы попросите 5g на 32-битной системе, java будет жаловаться на недопустимое значение и выйти.

Как и другие опубликованные, используйте флаги cmd-line - например

java -Xmx6g myprogram

В любом случае вы можете получить полный список (или почти полный список), набрав java -X.

280
ответ дан Steve B. 5 September 2018 в 10:49
поделиться

Пожалуйста, используйте команду ниже для изменения размера кучи до 6 ГБ

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
2
ответ дан Baum mit Augen 5 September 2018 в 10:49
поделиться

Можно увеличить размер кучи, выделенный JVM с помощью параметров командной строки. Здесь у нас есть 3 варианта

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

. В приведенной выше строке мы можем установить минимальную кучу 16 мб и максимальную кучу 64mb

143
ответ дан DGund 5 September 2018 в 10:49
поделиться

Это работает только с 64-разрядной версией Java. Перейдите в Панель управления и щелкните значок Java. В маленьком окне панели управления Java нажмите на панель меню Java, а затем нажмите кнопку view.

Если у вас две платформы Java, отключите предыдущую версию Java, затем нажмите Параметры времени выполнения и запись -Xmx1024m или меньше, чем размер ОЗУ. Не увеличивайте размер кучи, равный ОЗУ, иначе ваша система выйдет из строя.

2
ответ дан Eldelshell 5 September 2018 в 10:49
поделиться

Несколько человек указали конкретные ответы на размер кучи с параметрами jvm в -Xms и -Xms. Я хочу указать, что это не единственный тип параметров памяти для jvm. В частности, если вы получаете стеки через потоки, то вы захотите увеличить размер стека, добавив дополнительную опцию, например -Xss8m.

Для этой проблемы варианты jvm чего-то вроде -Xms2g -Xmx6g -Xss8m будут решением.

Я делюсь этой информацией, так как мои поисковые запросы Google о том, как увеличить память jvm, заставили меня к этому решению, и решения не работали с большим объемом выделения памяти. Как только я выяснил, для каких конкретных настроек, мне удалось Google, как увеличить размер стека и найти недостающий параметр. :) Надеюсь, это спасет время других, так как это спасло бы мне массу времени. :) [/ Д2]

1
ответ дан James Oravec 5 September 2018 в 10:49
поделиться

В 32-битной JVM наибольший размер кучи, который вы теоретически можете установить, составляет 4gb. Чтобы использовать большой размер кучи, вам нужно использовать 64-битную JVM. Попробуйте следующее:

java -Xmx6144M -d64

Флаг -d64 важен, так как это говорит о запуске JVM в 64-разрядном режиме.

25
ответ дан Kevin 5 September 2018 в 10:49
поделиться

Можно увеличить размер кучи, выделенный JVM в eclipse напрямую. В eclipse IDE goto

Run ----> Run Configurations ----> Аргументы

Введите -Xmx1g (Он используется для установки максимального размера, такого как Xmx256m или Xmx1g ...... m -> mb g ---> gb)

10
ответ дан Maks3w 5 September 2018 в 10:49
поделиться

Вы можете увеличить размер кучи, передав параметры JVM -Xms и -Xmx, как показано ниже:

Для файлов Jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Для файлов Java:

 java -Xms4096M -Xmx6144M ClassName

Вышеуказанные параметры увеличивают значение InitialHeapSize (-Xms) до 4 ГБ (4096 МБ) и MaxHeapSize (-Xmx) до 6 ГБ (6144 МБ).

Но размер кучи молодого поколения останется таким же, и дополнительный кусок HeapSize будет добавлен в размер кучи старого поколения. Чтобы уравнять размер кучи Young Gen и кучи старого поколения, используйте -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = размер старого кучи: Young Gen HeapSize (Вы можете играть с этим коэффициентом, чтобы получить желаемое соотношение).

2
ответ дан Sahil Chhabra 5 September 2018 в 10:49
поделиться

Да. Вы можете

Вы можете увеличить свою память кучи до 75% физической памяти (6 ГБ кучи) или выше.

Поскольку вы используете 64 бит, вы можете увеличить размер кучи на свой желаемая сумма. В случае, если вы используете 32-битный, он ограничен 4 ГБ.

$ java -Xms512m -Xmx6144m JavaApplication

Устанавливает исходный размер кучи до 512 МБ и максимальный уровень сжатия до 6 ГБ.

Надеюсь, что это поможет .. :)

0
ответ дан Sarat Chandra 5 September 2018 в 10:49
поделиться

Могу ли я увеличить память кучи до 75% физической памяти (куча 6 ГБ).

Да, вы можете. Фактически, вы можете увеличить до большего объема физической памяти, если хотите.

Будет ли это хорошей идеей, это зависит от того, сколько еще работает в вашей системе. В частности, если «рабочий набор» приложений и служб, которые в настоящее время работают, значительно превышает доступную физическую память, ваша система может «трэш», проводя много времени, перемещая страницы виртуальной памяти на диск и с диска. Чистый эффект заключается в том, что система становится очень медленной.

6
ответ дан Stephen C 5 September 2018 в 10:49
поделиться

java -d64 -Xms512m -Xmx4g HelloWorld

где, -d64: активирует 64-битный JVM -Xms512m: установит размер начальной кучи как 512 МБ -Xmx4g: установит максимальный размер кучи как 4 GB (здесь имя java-файла: HelloWorld.java)

8
ответ дан Sumit Deshinge 5 September 2018 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: