Java 运行jar文件

运行一个可执行的JAR文件

java [options] -jar jar-file-name [args …]

args:传入main()的参数

运行一个不可执行的JAR文件

java [options] -cp jar-file-name main-class-name [args …]

Java 8 JVM 参数

内存

-XX:+UseLargePages
允许使用大页面内存。默认情况下,此选项被禁用并且不使用大页面内存。

堆内存参数

-Xms
设置堆的最小和初始大小(以字节为单位)此值必须是1024的倍数且大于1 MB。字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。

-Xmx/-XX:MaxHeapSize=size
指定内存分配池的最大大小。此值必须是1024的倍数且大于2 MB。字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。

-XX:+HeapDumpOnOutOfMemoryError
当引发java.lang.OutOfMemoryError异常时,使用堆分析器(HPROF)启用将Java堆转储到当前目录中的文件的功能。您可以使用-XX:HeapDumpPath选项显式设置堆转储文件的路径和名称。默认情况下,禁用此选项,并且在抛出OutOfMemoryError异常时不转储堆。

-XX:HeapDumpPath=path
设置-XX:+ HeapDumpOnOutOfMemoryError选项时,设置用于写入由堆分析器(HPROF)提供的堆转储的路径和文件名。
默认情况下,该文件是在当前工作目录中创建的,其名称为java_pidpid.hprof,其中pid是导致错误的进程的标识符。
以下示例显示如何显式设置默认文件(%p表示当前进程标识符):
-XX:HeapDumpPath=./java_pid%p.hprof
以下示例显示如何将堆转储文件设置为/var/log/java/java_heapdump.hprof:
-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof

-XX:+PrintAdaptiveSizePolicy
启用有关自适应生成大小的信息的打印。默认情况下,此选项处于禁用状态。

新生代

-Xmn/-XX:MaxNewSize=size
设置新生代的堆的初始大小和最大大小(以字节为单位)字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。

-XX:SurvivorRatio=ratio
设置伊甸园空间大小与幸存者空间大小之间的比率。默认情况下,此选项设置为8。

eden区
survivor区

老年代

-XX:MaxTenuringThreshold=threshold(对象晋升老年代的年龄阈值)
设置用于自适应GC大小调整的最大使用期限阈值。最大值为15。并行(吞吐量)收集器的默认值为15,而CMS收集器的默认值为6。

元空间

-XX:MetaspaceSize=size
设置分配的类元数据空间的大小,该类元数据空间将在首次超过垃圾收集时触发垃圾收集。垃圾收集的阈值取决于使用的元数据量而增加或减少。默认大小取决于平台。

-XX:MaxMetaspaceSize=size
设置可以为类元数据分配的最大本机内存。默认情况下,大小不受限制。应用程序的元数据量取决于应用程序本身,其他正在运行的应用程序以及系统上可用的内存量。

栈内存参数

-Xss
设置线程堆栈大小(以字节为单位)。附加字母k或K表示KB,m或M表示MB,g或G表示GB。

垃圾收集参数

-verbose:gc
显示有关每个垃圾收集(GC)事件的信息。

-XX:+PrintGC
启用在每个GC上打印消息的功能。默认情况下,此选项处于禁用状态。

-XX:+PrintGCDetails
启用在每个GC上打印详细消息的功能。默认情况下,此选项处于禁用状态。

-XX:+DisableExplicitGC
启用用于禁用对System.gc()的调用的处理的选项。默认情况下禁用此选项,这意味着将处理对System.gc()的调用。如果禁用了对System.gc()的调用处理,则在必要时JVM仍将执行GC。(即:添加该参数后,System.gc()不会触发GC)

-XX:ParallelGCThreads=threads
设置用于年轻一代和老一代的并行垃圾回收的线程数。缺省值取决于JVM可用的CPU数量。

-XX:+UseAdaptiveSizePolicy
启用自适应生成大小调整。默认情况下启用此选项。要禁用自适应生成大小调整,请指定-XX:-UseAdaptiveSizePolicy并显式设置内存分配池的大小(请参阅-XX:SurvivorRatio选项)。

-XX:+PrintGCDateStamps
允许在每次 GC 时打印日期戳。默认情况下,此选项处于禁用状态。

-XX:+PrintGCApplicationStoppedTime
启用打印暂停(例如,GC 暂停)持续的时间。默认情况下,此选项处于禁用状态。

-XX:MaxGCPauseMillis=time
设置最大 GC 暂停时间的目标(以毫秒为单位)。这是一个软目标,JVM 将尽最大努力实现它。默认情况下,没有最大暂停时间值。
下面的示例显示如何将最大目标暂停时间设置为500 ms:
-XX:MaxGCPauseMillis=500

新生代垃圾收集器参数

-XX:+UseSerialGC
启用串行垃圾收集器的使用。 对于不需要垃圾回收具有任何特殊功能的小型和简单应用程序,这通常是最佳选择。 默认情况下,此选项是禁用的,并且将根据计算机的配置和JVM的类型自动选择收集器。

-XX:+UseParNewGC
允许在新生代中使用并行线程进行收集。 默认情况下,此选项处于禁用状态。 当您设置-XX:+ UseConcMarkSweepGC选项时,它将自动启用。 在JDK 8中,不建议使用-XX:+ UseParNewGC选项而不使用-XX:+ UseConcMarkSweepGC选项。

-XX:+UseParallelGC
允许使用并行清除垃圾收集器(也称为吞吐量收集器),以利用多个处理器来提高应用程序的性能。
默认情况下,此选项是禁用的,并且将根据计算机的配置和JVM的类型自动选择收集器。 如果已启用,则-XX:+ UseParallelOldGC选项将自动启用,除非您明确禁用它。

老年代垃圾收集器参数

-XX:+UseParallelOldGC
允许将并行垃圾收集器用于完整的GC。默认情况下,此选项处于禁用状态。自动启用它会启用-XX:+ UseParallelGC选项。

-XX:+UseConcMarkSweepGC
允许将CMS垃圾收集器用于老年代。 当吞吐量(-XX:+ UseParallelGC)垃圾收集器无法满足应用程序延迟要求时,Oracle建议您使用CMS垃圾收集器。 G1垃圾收集器(-XX:+ UseG1GC)是另一种选择。
默认情况下,此选项是禁用的,并且将根据计算机的配置和JVM的类型自动选择收集器。 启用此选项后,将自动设置-XX:+ UseParNewGC选项,并且您不应禁用它,因为在JDK 8中不推荐使用以下选项组合:-XX:+ UseConcMarkSweepGC -XX:-UseParNewGC。

-XX:+UseG1GC
启用垃圾优先(G1)垃圾收集器的使用。 它是一种服务器样式的垃圾收集器,适用于具有大量RAM的多处理器计算机。 它极有可能满足GC暂停时间目标,同时保持良好的吞吐量。 建议将G1收集器用于需要大堆(大小约为6 GB或更大)且GC延迟要求有限(稳定且可预测的暂停时间在0.5秒以下)的应用程序。
默认情况下,此选项处于禁用状态,并且根据计算机的配置和JVM的类型自动选择收集器

文件参数

-Xloggc:filename
设置应将详细 GC 事件信息重定向到哪个文件以进行日志记录。写入此文件的信息类似于 -verbose:gc 的输出,其中包含自每个记录事件之前的第一个 GC 事件以来经过的时间。 -Xloggc 选项会覆盖 -verbose:gc 如果两者都使用相同的 java 命令给出。

-XX:LogFile=path
设置写入日志数据的路径和文件名。默认情况下,在当前工作目录中创建文件,并将其命名为hotspot.log。

-XX:ErrorFile=filename
指定发生不可恢复的错误时将错误数据写入的路径和文件名。默认情况下,此文件在当前工作目录中创建,并命名为hs_err_pidpid.log,其中pid是导致错误的进程的标识符。以下示例显示如何设置默认日志文件(请注意,该进程的标识符指定为%p):
-XX:ErrorFile=./hs_err_pid%p.log
以下示例显示如何将错误日志设置为/var/log/java/java_error.log:
-XX:ErrorFile=/var/log/java/java_error.log
如果由于空间不足,权限问题或其他问题而无法在指定目录中创建文件,则将在操作系统的临时目录中创建文件。临时目录是/ tmp。

类加载参数

-verbose:class 显示有关每个已加载类的信息。

锁参数

-XX:-UseBiasedLocking
禁用偏向锁定。 启用此标志的一些具有大量无竞争同步的应用程序可能会获得显着的加速,而具有某些锁定模式的应用程序可能会出现减速。 有关偏向锁定技术的更多信息,请参阅 http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5 上的 Java 调优白皮书中的示例

默认情况下,启用此选项。

部署Java 项目基本参数案例参考

高吞吐量

JAVA_OPS="-server"
JAVA_OPS="${JAVA_OPT} -Xms512m -Xmx640m" #堆最小初始化大小 堆最大内存大小
JAVA_OPS="${JAVA_OPT} -XX:+UseParallelGC" #使用并行垃圾收集器
JAVA_OPS="${JAVA_OPT} -XX:MaxGCPauseMillis=500" #最大GC停顿时间
JAVA_OPS="${JAVA_OPT} -XX:+UseAdaptiveSizePolicy" #使用自适应大小调节策略,不需要分配堆中各区域大小会动态分配
JAVA_OPS="${JAVA_OPT} -XX:+PrintGC -XX:+PrintGCDetails -XX:+DisableExplicitGC" #打印GC GC详情 禁用显示GC
JAVA_OPS="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError" # 出现java.lang.OutOfMemoryError 将Java堆转储到当文件

快速响应

当吞吐量(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时,Oracle建议您使用CMS垃圾收集器。

GC_LOG_DIR=/var/logs/gc
app_name=app
JAVA_OPS="-server"
JAVA_OPS="${JAVA_OPT} -Xms512m -Xmx640m" #堆最小初始化大小 堆最大内存大小
JAVA_OPS="${JAVA_OPT} +UseConcMarkSweepGC" #使用并发垃圾收集器
JAVA_OPS="${JAVA_OPT} -XX:+UseAdaptiveSizePolicy  -XX:+PrintAdaptiveSizePolicy" #使用自适应大小调节策略。不需要分配堆中各区域大小,会动态分配。
JAVA_OPS="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/${app_name}_gc_%p_%t.log -XX:+PrintGC -XX:+PrintGCDetails -XX:+DisableExplicitGC" #打印GC GC详情 禁用显示GC
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" # GCLog文件轮转 
JAVA_OPS="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError" # 出现java.lang.OutOfMemoryError 将Java堆转储到当文件
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking" #不使用大页内存、不实用偏向锁

运行jar文件

startJar.sh

#/bin/bash
java ${JAVA_OPT} -jar xxx.jar

如何计算堆内存大小、栈内存大小?

  • web 容器线程数?
  • 对象大小、数量?
  • 加载类数量、大小?

参考

  • https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

你可能感兴趣的:(易理解系列,java)