Java как запустить программу с параметрами
Некоторое время я использовал Java, и я также понял и использовал некоторые параметры JVM (виртуальной машины Java), но я не разобрался со смыслом каждого параметра.
Как использовать Java
- java [options] classname [args]
- java [options] -jar filename [args]
options: Параметры командной строки, разделенные пробелом
classname: Имя класса для начала
filename: Имя пакета JAR (JAR)
args: main()Параметры метода, разделенные пробелами
Метод main () загруженного класса должен быть определен как public static, и возвращаемого значения нет, параметр представляет собой список строк
Если используется опция -jar, args - это класс, включенный в пакет JAR. Класс запуска должен быть указан через манифест Main-Class, например:
Options
Командная строка Java предоставляет следующие типы параметров
- Стандартные варианты
- Нестандартные варианты
- Расширенные параметры запуска
- Расширенные возможности JIT-компиляции
- Расширенные возможности сборки мусора
- Расширенные возможности юзабилити
(1) Стандартные опции поддерживаются всеми типами JVM. Стандартные параметры используются для рутинных операций, таких как просмотр версии и установка пути к классу.
(2) Нестандартные параметры обычно относятся к параметрам, характерным для виртуальной машины Java HotSpot, и не могут быть гарантированно поддержаны всеми типами JVM.-XНачиная.
(3) Расширенные параметры - это параметры для настройки определенных областей виртуальной машины Java HotSpot, и они не гарантированно поддерживаются всеми JVM. Когда этот тип выбран для использования,-XXНачиная. Для логических опций, используя+Указывает, что опция вступает в силу,- Чтобы указать, что параметры недействительны. в качестве-XX:+OptionNameОпция OptionName вступает в силу,-XX:-OptionNameОпция OptionName недействительна.
Стандартные варианты
Все типы JVM поддерживают стандартные параметры, для которых мы просто перечисляем несколько часто используемых параметров.
Запустите приложение в 64-битной среде. Если 64-битная среда не инициализирована или не поддерживается, будет сообщено об ошибке. По умолчанию выполняется в 32-битной среде.
Показать справочную документацию
Показать каждый загруженный класс
Показать каждое событие сборки мусора
Показать текущую версию Java
-disableassertions[:[packagename]…|:classname] / -da[:[packagename]…|:classname]
Отключить утверждение (assert), вы можете указать пакет и класс, чтобы отключить утверждение.
-disablesystemassertions / -dsa
отключить все утверждения (assert)
Чтобы включить утверждения, вы можете указать пакет и класс. Утверждение по умолчанию отключено.
Включить все утверждения (assert)
Выберите Java HotSpot Server VM. 64-битная версия неявно устанавливает -server.
Определите значения системных атрибутов. Переменная свойства представляет собой строку, представляющую имя свойства, а значение представляет собой заданное значение свойства.
Возьмем в качестве примера настройку кодировки файлов системы как utf-8:
Нестандартные варианты
Нестандартные параметры обычно относятся к параметрам, специфичным для виртуальной машины Java HotSpot. Перечислите несколько часто используемых вариантов.
Показать действительный-XСправочная информация для опций
Отключить фоновую компиляцию. По умолчанию JVM компилируется в фоновом режиме. Эта опция эквивалентна-XX:-BackgroundCompilation
Установите начальное значение и максимальный размер молодого поколения в куче. Единица байта, обычно используется K, M, G (без учета регистра)
Молодое поколение в основном размещает новые объекты, и эта область также является областью, где GC часто выполняется. Если локальная настройка мала, это может привести к частому второстепенному ГХ. Если настройка слишком велика, будет выполняться только полный ГХ, и каждый ГХ займет больше времени. Размер, рекомендуемый Oracle, составляет от 1 / 4-1 / 2 от общего размера кучи.
Возьмем для примера размер настройки 256 МБ:
-Xmn256m
Отличается от-XmnУстановите начальное значение и максимальное значение одновременно-XX:NewSizeНачальная настройка,-XX:MaxNewSizeУстановите максимальное значение.
Установите начальное значение кучи, которое должно быть кратно 1024 и больше 1 МБ.
Возьмите настройку начального значения 6 МБ в качестве примера:
-Xms6m
Если значение не установлено, начальное значение кучи рассчитывается путем вычисления суммы молодого и старого поколений.
Укажите максимальный объем памяти приложения. Значение должно быть кратно 1024 и больше 2 МБ. Для сервис-ориентированных приложений,-Xmsи-XmxЧасто устанавливается на то же самое, поскольку причина включает механизм сбора мусора, если два параметра одинаковы, память, занимаемая приложением, не расширяется динамически.
Возьмите настройку максимального объема памяти 1G в качестве примера:
-Xmx1g
-XmxЭквивалент расширенных параметров-XX:MaxHeapSize
Установите размер стека потоков.
В качестве примера возьмем стек потоков размером 1024 КБ:
-Xss1024k
-XssЭквивалент расширенных параметров-XX:ThreadStackSize
Расширенные параметры запуска
Этот тип параметра управляет временем выполнения виртуальной машины Java HotSpot. Перечислите несколько часто используемых вариантов.
Включение этой опции приведет к тому, что вложения в инструментах JVM, таких как jcmd, jstack, jmap jinfo, будут недействительными. По умолчанию эта опция недопустима, и можно использовать классы инструментов, предоставляемые JVM.
Установите максимальный размер прямой памяти для размера. Для новых операций ввода-вывода вы можете использовать память вне кучи (прямую память) для создания объектов. Этот параметр задает размер этой области.
Возьмите пример установки максимальной прямой памяти в 1 МБ:
-XX:MaxDirectMemorySize=1m
Установите размер стека потока, который эквивалентен-XssПараметры.
Расширенные возможности юзабилити
Этот тип опции предоставляет возможность собирать системную информацию и отлаживать. Перечислите несколько часто используемых вариантов.
Включите эту опцию, когда она появитсяjava.lang.OutOfMemoryErrorКогда это ненормально, информация о куче Java будет выгружаться в файл в текущем каталоге с именем файла: java_pid [идентификатор процесса] .hprof-XX:HeapDumpPathУкажите путь к файлу дампа. Мы используем такие инструменты, как MemoryAnalyzer, для проверки состояния системы с помощью файла дампа, который по умолчанию отключен.
Укажите путь к файлу дампа, когда OutOfMemoryError является ненормальным, примеры следующие:
Задайте файл журнала. По умолчанию он в настоящее время называется hotspot.log. Как правило, мы будем использовать инструмент slf4j для установки журнала, но эта опция используется не очень часто.
Расширенные возможности сборки мусора
Этот тип опции используется виртуальной машиной Java HotSpot для управления сборкой мусора.
Включить оптимизацию кучи Java. Оптимизация кучи выполняется адаптивно на основе сервера. По умолчанию отключено.
Включить удаление класса при использованииCMS(the concurrent mark-sweep)Сборщик мусора. Включено по умолчанию. Если этот параметр отключен, установите значение-XX:-CMSClassUnloadingEnabled
Установите коэффициент старшего поколения. При запуске сборки мусора CMS это значение находится в диапазоне 0-100. Значением по умолчанию является -1.
Возьмем 70% старого поколения в качестве примера:
Установите количество потоков сборки мусора во время одновременной сборки мусора. Значением по умолчанию является количество действительных процессоров в JVM.
Возьмем количество потоков 2 в качестве примера:
Установите количество потоков сборки мусора параллельно GC. Значением по умолчанию является количество действительных процессоров в JVM.
Возьмем количество потоков 2 в качестве примера:
Включите эту опцию, позвоните в программуSystem.gc()Обработка недействительна. Эта опция по умолчанию отключена, что означает, что вызов отображается в программеSystem.gc()Выполнен.
Установите начальный размер памяти приложения, значение равно 0 или кратно 1024 и больше 1 МБ.
Возьмите пример установки начального объема памяти до 6 МБ:
Если установлено значение 0, начальное значение является суммой старого поколения и нового поколения.
Установите максимальное значение памяти приложения, которое кратно 1024 и больше 2 МБ. Это значение обычно совпадает с-XX:InitialHeapSizeНастройки одинаковы.
Эта опция эквивалентнаXmx
Установите соотношение молодого поколения к старому, по умолчанию 2.
Взять соотношение 1 в качестве примера:
Установите начальный размер кучи молодого поколения, что эквивалентно опции-Xmn
Вывести подробную информацию о каждом ГХ, по умолчанию отключено.
Каждый GC отображает отметку времени, которая по умолчанию отключена
Время задержки печати ГХ, по умолчанию отключено
Включение этой опции означает, что сборщик мусора в старом поколении использует сборщик мусора CMS. После включения этой опции,-XX:+UseParNewGCОпции автоматически включаются и не могут быть отключены. По умолчанию отключено. В JDK 8 старое поколение использовало комбинацию CMS, младшее поколение не использовало ParNew, а именно-XX:-UseParNewGCи-XX:+UseConCMarkSweepGCБыл заброшен
Включить G1 (сборщик мусора). G1 - это сборщик мусора серверного типа для многопроцессорных машин с большим объемом оперативной памяти. Цель состоит в том, чтобы уменьшить задержку GC и поддерживать пропускную способность. Рекомендуется использовать при установке кучи (> = 6 ГБ) большой. По умолчанию отключено.
Включите сборщик мусора Parallel Scavenge, сборщик мусора является многопроцессорной обработкой, целью является повышение пропускной способности. Когда эта опция включена, -XX: + UseParallelOldGC будет автоматически включен, если он не отключен. По умолчанию отключено.
Включите эту опцию, чтобы использовать сборщик мусора Parallel Garbage во время Full GC. По умолчанию отключено. и-XX:+UseParallelGCПарное использование.
Включите эту опцию, чтобы использовать параллельный поток сборщика мусора в молодом поколении. По умолчанию отключено. В JDK 8 молодое поколение использует ParNew, старое поколение не использует комбинацию CMS, а именно-XX:+UseParNewGCи-XX:-UseConCMarkSweepGCБыл заброшен
Включить однопоточный сборщик мусора. Для простых небольших приложений никаких специальных настроек сборки мусора не требуется, и этот вариант является хорошим выбором. По умолчанию отключено.
Наконец, для углубления понимания добавлена объединенная картина молодых и старых сборщиков мусора.
ссылки
[1] jdk 1.8 справочная документация
[2] Глубокое понимание виртуальной машины Java: расширенные возможности и лучшие практики JVM
Как правило, каждое значимое приложение включает в себя один или несколько файлов JAR в качестве зависимостей. Однако бывают случаи, когда сам файл JAR представляет собой автономное приложение или веб-приложение.
В этой статье мы сосредоточимся на сценарии автономного приложения. В дальнейшем мы будем называть его приложением JAR.
В этом уроке мы сначала узнаем, как создать приложение JAR. Позже мы узнаем, как запускать приложение JAR с аргументами командной строки или без них|/.
2. Создайте приложение JAR
Файл JAR может содержать один или несколько основных классов. Каждый основной класс является точкой входа приложения . Таким образом, теоретически файл JAR может содержать более одного приложения, но он должен содержать по крайней мере один основной класс, чтобы иметь возможность работать.
Файл JAR может иметь одну точку входа, установленную в файле манифеста . В этом случае файл JAR является исполняемым файлом JAR . Основной класс должен быть включен в этот файл JAR.
Прежде всего, давайте рассмотрим краткий пример того, как скомпилировать наши классы и создать исполняемый файл JAR с файлом манифеста:
Неисполняемый JAR-это просто файл JAR, который не имеет Основного класса , определенного в файле манифеста. Как мы увидим позже, мы все еще можем запустить основной класс, который содержится в самом файле JAR.
Вот как мы создадим неисполняемую банку без файла манифеста:
3. Аргументы командной строки Java
Как и любое приложение, приложение JAR принимает любое количество аргументов, включая нулевые аргументы. Все зависит от потребностей приложения.
Это позволяет пользователю указать информацию о конфигурации при запуске приложения .
В результате приложение может избежать жестко закодированных значений и по-прежнему может обрабатывать множество различных вариантов использования.
Аргументы разделяются одним или несколькими пробелами . Если аргумент должен содержать пробелы, они должны быть заключены между кавычками. Одинарные или двойные кавычки работают нормально.
Обычно для типичного приложения Java при вызове приложения пользователь вводит аргументы командной строки после имени класса.
Однако это не всегда относится к приложениям JAR.
Как мы уже обсуждали, точкой входа основного класса Java является метод main . Все аргументы являются String s и передаются в основной метод в виде массива String .
Тем не менее, внутри приложения мы можем преобразовать любой элемент массива String в другие типы данных, такие как char , int , double , их классы-оболочки, или другие соответствующие типы.
4. Запустите исполняемый файл JAR с аргументами
Давайте рассмотрим базовый синтаксис для запуска исполняемого файла JAR с аргументами:
java -jar jar-имя файла [args …]
Исполняемый файл JAR, созданный ранее, представляет собой простое приложение, которое просто выводит переданные аргументы. Мы можем запустить его с любым количеством аргументов. Ниже приведен пример с двумя аргументами:
Мы увидим следующий вывод в консоли:
Таким образом, при вызове исполняемого файла JAR нам не нужно указывать имя основного класса в командной строке . Мы просто добавляем наши аргументы после имени файла JAR. Если мы указываем имя класса после имени исполняемого файла JAR, оно просто становится первым аргументом для фактического основного класса.
В большинстве случаев приложение JAR-это исполняемый файл JAR. Исполняемый файл JAR может содержать не более одного основного класса, определенного в файле манифеста .
Следовательно, другие приложения в том же исполняемом файле JAR не могут быть установлены в файле манифеста, но мы все равно можем запускать их из командной строки, как и для неисполняемого файла JAR. Как именно, мы увидим в следующем разделе.
5. Запустите неисполняемую банку с аргументами
Чтобы запустить приложение в неисполняемом файле JAR, мы должны использовать опцию -cp вместо -jar . Мы будем использовать параметр -cp (сокращение от classpath), чтобы указать файл JAR, содержащий файл класса, который мы хотим выполнить:
java -cp jar-file-name main-class-name [args …]
Как вы можете видеть, в этом случае нам придется включить имя основного класса в командную строку, за которым следуют аргументы .
Неисполняемый JAR, созданный ранее, содержит то же самое простое приложение. Мы можем бежать
Неисполняемый JAR, созданный ранее, содержит то же самое простое приложение. Мы можем бежать
Неисполняемый JAR, созданный ранее, содержит то же самое простое приложение. Мы можем бежать
В этом уроке мы изучили два способа запуска приложения JAR в командной строке с аргументами или без них.
Мы также продемонстрировали, что аргумент может содержать пробелы и специальные символы (если это разрешено оболочкой).
Читайте также: