文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java -jar参数详解:掌握Java可执行JAR文件的运行技巧

2023-08-17 17:55

关注

作为一种常用的开发语言,Java经常使用可执行的JAR(Java Archive)文件来打包和分发应用程序。使用java -jar命令运行JAR文件是一种方便快捷的方式。本文将详细介绍java -jar命令的各种参数,帮助您充分利用这个功能。

一、简介

java -jar命令用于运行可执行的JAR文件。它会自动查找JAR文件中的清单文件(MANIFEST.MF),并根据清单文件中的Main-Class属性指定的主类来启动应用程序。

二、常用参数详解

以下是一些常用的java -jar命令的参数,让我们逐一了解它们的功能和用法。

  1. -Xmx:指定Java堆的最大内存大小。例如,-Xmx512m表示将最大堆内存设置为512MB。通过调整堆内存大小,可以优化应用程序的性能和内存使用情况。

  2. -Xms:指定Java堆的初始内存大小。例如,-Xms256m表示将初始堆内存设置为256MB。这个参数可以帮助您在启动应用程序时控制初始内存分配的大小。

  3. -Xss:指定线程栈的大小。例如,-Xss1m表示将线程栈大小设置为1MB。线程栈用于存储线程的局部变量和方法调用信息。通过调整线程栈的大小,可以控制应用程序的并发性能和内存使用情况。

  4. -XX:MetaspaceSize=256m参数,您可以指定元空间的初始大小为256MB。这意味着在应用程序启动时,虚拟机会预分配256MB的内存用于存储类的元数据。

  5. -XX:MaxMetaspaceSize=:指定元空间的最大大小。元空间用于存储类的元数据信息。例如,-XX:MaxMetaspaceSize=256m表示将元空间的最大大小设置为256MB。适当设置元空间的大小可以避免类加载和元数据溢出的问题。

  6. -D=:设置系统属性。例如,-Djava.library.path=/path/to/libs设置java.library.path系统属性为/path/to/libs。您可以使用这个参数来配置应用程序的一些属性,例如文件路径、日志级别等。

  7. -verbose:class:打印类加载信息。使用这个参数可以了解应用程序在运行过程中加载的类的详细信息,包括类的名称、来源等。

  8. -verbose:gc:打印垃圾回收信息。通过使用这个参数,您可以了解应用程序的垃圾回收情况,包括垃圾回收器的使用情况、回收的对象数量等。

  9. -Dfile.encoding=:设置默认的文件编码。例如,-Dfile.encoding=UTF-8表示使用UTF-8编码来读取和写入文件。正确设置文件编码可以确保应用程序能够正确处理不同字符集的文本数据。

以上是一些常用的java -jar命令的参数,通过灵活运用这些参数,您可以对应用程序的性能、内存使用和系统属性进行优化和配置。

三、示例使用

示例1: 前台启动

java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m /opt/myapp/myapp.jar

在上述示例中,我们同时使用了多个参数。-Xms4096m设置最大堆内存为4096MB,-Xmx4096m设置初始堆内存为4096MB,-XX:MetaspaceSize=256m 将元空间的初始大小设置为256MB,-XX:MaxMetaspaceSize=256m 将元空间的最大大小设置为256MB,最后,通过-jar选项指定要运行的JAR文件为myapp.jar。

示例2: 后台启动,并输出日志到nohub.out

nohup /usr/local/java/jdk1.8.0_333/bin/java -jar -Xms8192m -Xmx8192m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC /home/myapp/myapp.jar > nohup.out 2>&1 &

四、启动脚本

一般情况了,我们会在jar包的同级目录下创建一个start.sh的启动脚本来启动我们的服务
**示例1:**启动脚本

#!/bin/shnohup /usr/local/java/jdk1.8.0_102/bin/java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m   /home/myapp/myapp.jar  > nohup.out 2>&1 &

**示例2:**通用脚本

#!/bin/bash# ################################################################### ### Service start script# ################################################################### 方便查看日志,参数为 -fPRG="$0"P1=$1#PRGDIR=`dirname "$PRG"`PRGDIR=`pwd`# ### 启动成功提示!function success () {    echo "#####"    echo "####################### Start Service End! #######################"    echo ""    echo -e "                    \033[32;1;5m [ START SUCCESSFULLY! ]\033[0m"    echo ""}# ### 启动失败提示警告!function failed () {    echo "#####"    echo "####################### Start Service End! #######################"    echo ""    echo -e "                   \033[37;41;1;5m [ FAILED! FAILED! FAILED! ]\033[0m"    echo -e "       \033[37;41;1;5m [ $1 ]\033[0m"    echo ""}echo "####################### Start Service ############################"echo "#####"echo "##### Current Working Path: $PWD"# ### Script running flag!STATUS="OK!"JAVA_VERSION=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'`echo "##### Java Version : $JAVA_VERSION"# ### 判断jdk版本是否是1.8JAVA_VERSION_P="1.8"JAVA_PATH=""if [[ $JAVA_VERSION =~ $JAVA_VERSION_P ]]then    echo "##### The JDK is OK!"    JAVA_PATH=`which java`else    echo "##### The JDK is not supported!"fi# ### 扫描/opt和/usr目录获取JAVA_PATHreg='jdk1.8.0_[0-9]{1,3}/bin/java'if [ "$JAVA_PATH" = "" ]; then    echo "##### Find JDK directory!"    echo "##### '/opt' And '/usr' directory will be scanned."    echo "##### Start scan '/opt' directory ... ..."    JAVA_PATH_DIR=$(find /opt -name java 2>&1)    for i in $JAVA_PATH_DIR    do        if [[ $i =~ $reg ]]; then            echo "##### JDK_PATH : $i"            echo "##### The JDK_PATH is OK!"            JAVA_PATH=$i        fi    donefiif [ "$JAVA_PATH" = "" ]; then    echo "##### '/opt' directory Not found the JDK!"    echo "##### Start scan '/usr' directory ... ..."    JAVA_PATH_DIR=$(find /usr -name java 2>&1)    for i in $JAVA_PATH_DIR    do        if [[ $i =~ $reg ]]; then            echo "##### JDK_PATH : $i"            echo "##### The JDK_PATH is OK!"            JAVA_PATH=$i        fi    donefiif [ "$JAVA_PATH" = "" ]; then    echo "##### '/usr' directory Not found the JDK!"    msg="The JDK Not found, Please configure the JDK!"    echo "##### $msg"    failed "$msg"    exitfi# ### 获取jar文件,若多个jar文件,默认选择使用最新文件echo "##### Get running jar file, if more than jar file, the default option is to use the latest file."JarFileName=$(ls -lt $PRGDIR/*.jar 2>&1|awk '/^-/ {print $NF}'|sed -n '1p')if [ -z "$JarFileName" ]; then    msg="The jar file is not exist! Please confirm before implementation."    echo "##### $msg"    failed "$msg"    exitfiecho "##### Currently Running JarFileName: $JarFileName"# ### 设置JVM参数CATALINA_OPTS="-Xms8192m -Xmx8192m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC"RUN_COM="nohup $JAVA_PATH -jar $CATALINA_OPTS $JarFileName 2>&1"echo "##### Run the command : $RUN_COM"#nohup $JAVA_PATH -jar $CATALINA_OPTS $JarFileName > nohup.out 2>&1 &setsid $JAVA_PATH -jar $CATALINA_OPTS $JarFileName > nohup.out 2>&1 &# ### 将jar包启动对应的pid写入文件中,为停止时提供pidi# echo $! > run.pidif [ $? -eq 0 ]; then    success    if [  "$P1" == "-f" ]; then        echo "#################### tail -f nohup.out #########################"        tail -f nohup.out    fielse    failed "$msg"fi

五、总结

本文介绍了java -jar命令的常用参数、使用方法及其启动脚本,帮助您更好地掌握Java可执行JAR文件的运行技巧。通过合理配置这些参数,您可以优化应用程序的性能、内存使用和系统属性,提升应用程序的稳定性和效率。

在实际应用中,您可以根据具体的需求和环境进行参数的调整和配置。了解这些参数的功能和用法,对于开发和部署Java应用程序是非常有帮助的。

希望本文对您有所启发,并能够帮助您更好地理解和使用java -jar命令。如有任何疑问或建议,请在下方留言,我们将尽快回复。感谢阅读!,了解一下Markdown的基本语法知识。

来源地址:https://blog.csdn.net/weixin_44002151/article/details/131224407

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯