Java常见启动命令 -jar、-server、-cp比较

news2024/9/22 5:34:19

文章目录

  • Java程序常见启动方式
    • java -jar
    • java -server与-client参数
    • java -cp

Java程序常见启动方式

当前java程序启动主要以 -jar-server-cp等几个命令启动 jar 程序,其中我们最常用的java -jar启动方式,通常我们需要将当前工程所依赖的所有包编译到一个jar包中,随着工程不断迭代,外部依赖越来越多,会导致整个jar包体积变得很大,每次更新部署传输效率就会变得很低,这时我们就可以使用到另外两个命令来替代-jar命令,将一部分或者全部依赖拆分,更新部署时只用更新部分依赖即可

java -jar

此命令不用多说,基本所有javaer都很熟悉,也很简单
示例:
基础用法

java -jar xxxxxx.jar

依赖拆分到外部的用法,使用java -jar命令,同时需要将部分依赖包拆分到主启动程序jar包外部时,通常将jar包放置在主jar包相对目录下的一个单独的lib文件中,如下图,lib为拆分后的外部依赖放置的目录
在这里插入图片描述
如上图,原jar包大小为110m,通过将部分依赖移出到外部之后,主启动程序jar包仅5.4m,这样便于开发迭代时缩小传输体量,提高效率,这时需要使用到启动参数-Dloader.path=lib来加载主程序外部的依赖

java -Dloader.path=lib -jar xxxxxx-app.jar

java -server与-client参数

可以通过-server或-client设置jvm的运行参数。

它们的区别是Server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。
Client VM相对来讲会保守一些,初始堆空间会小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快,但运行速度会比Serverm模式慢些。

JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的 JVM。

32位操作系统
如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。

如果是其他操作系统上,机器配置有2GB以上的内存同时有2个以上CPU的话默认使用server模式,否则使用client模式。

64位操作系统
只有server类型,不支持client类型。

-server命令可以配合-jar命令使用,也可单独使用

java -server -Xmx1024m -Xms256m -Xmn512m -Xss256k -Dloader.path=lib -jar xxxxxx-app.jar

-server单独使用,配合-classpath加载外部依赖

maven build构建插件,maven-assembly-plugin,将所有jar构建到lib目录

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <appendAssemblyId>true</appendAssemblyId>
                <finalName>cas-service</finalName>
                <descriptors>
                    <descriptor>src/main/assembly/package.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

package.xml

<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>bin</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>src/main/bin</directory>
            <outputDirectory>/bin</outputDirectory>
            <fileMode>755</fileMode>
        </fileSet>
        <fileSet>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/mybatis-mapper/*</exclude>
            </excludes>
            <outputDirectory>/conf</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>
#!/bin/bash
MAIN_CLASS=com.xxx.XXXApp

source ~/.bash_profile
export PROJECT_HOME="$(
  cd "$(dirname "$0")"/..
  pwd
)"

APP_CLASS_PATH=.:$PROJECT_HOME/conf:$PROJECT_HOME/lib/*

mkdir $PROJECT_HOME/logs 2>/dev/null

(LD_LIBRARY_PATH=. java -server -Xmx256m -Xms256m -Xmn128m -Xss512k \
  -classpath $APP_CLASS_PATH $MAIN_CLASS >/dev/null 2>&1 &)

java -cp

使用-cp命令启动时,用法与-server配合-classpath使用时类似,不同的是不能与-jar命令一起使用,使用-cp命令时-jar便会失效
在这里插入图片描述

#!/bin/bash

MAIN_CLASS=com.xxx.XXXApp

source ~/.bash_profile
export PROJECT_HOME="$(
  cd "$(dirname "$0")"/..
  pwd
)"

function init_app_class_path() {
  for file in $1/*; do
    if [ -z "$APP_CLASS_PATH" ]; then
      APP_CLASS_PATH=$file
    else
      APP_CLASS_PATH=$APP_CLASS_PATH:$file
    fi
  done
}

init_app_class_path $PROJECT_HOME/lib
APP_CLASS_PATH=$PROJECT_HOME/conf:$APP_CLASS_PATH

mkdir $PROJECT_HOME/logs 2>/dev/null

(LD_LIBRARY_PATH=. java -Xmx512m -Xms256m -Xmn128m -Xss512k \
  -cp $APP_CLASS_PATH $MAIN_CLASS >/dev/null 2>&1 &)

试了一下,-cp扫描所有jar包及配置,直接使用*也是可以匹配到的,如下这种方式也是有效的

java -cp /data/myapp/conf:/data/myapp/lib/* com.xxx.XXXApp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全网资料最全Java数据结构与算法(1)

一、数据结构和算法概述 1.1什么是数据结构&#xff1f; 官方解释&#xff1a; 数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及他们之间的关系和操作等相关问题的学科。 大白话&#xff1a; 数据结构就是把数据元素按照一定的关系组织起来的集合&a…

leecode-C语言实现-28. 找出字符串中第一个匹配项的下标

一、题目给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。示例 1&#xff1a;输入&#xff1a;haystack …

flutter 微信聊天输入框

高仿微信聊天输入框&#xff0c;效果图如下&#xff08;目前都是静态展示&#xff0c;服务还没开始开发&#xff09;&#xff1a; 大家如果观察仔细的话 应该会发现&#xff0c;他输入框下面的高度 刚好就是 软键盘的高度&#xff1b;所以在这里就需要监听软键盘的高度。还要配…

zigbee与WIFI同频干扰问题

zigbee与WIFI同频干扰 为了降低Wifi信道与Zigbee信道的同频干扰问题&#xff0c;Zigbee联盟在《Zigbee Home Automation Public Application Profile》中推荐使用11,14,15,19,20,24,25这七个信道。 为什么呢&#xff0c;我们看一下Wifi和Zigbee的信道分布。 WiFi带宽对干扰的…

社交媒体营销的5个好处

有些人认为&#xff0c;社交媒体营销不能直接与销售挂钩。这就是为什么在制定营销策略时&#xff0c;社交媒体营销会被部分人忽视的原因。然而&#xff0c;与其他广告渠道不同&#xff0c;社交媒体是双向渠道。忽视社交媒体营销将影响与客户的关系。最重要的是&#xff0c;它将…

兔c同学:python 如何写入文件(python 的文件和异常)

文章目录1. 写入文件1.1 写入空文件1.2 open() 函数 和 write() 函数说明open() 函数的参数说明write() 函数1.3 附加到文件1. 写入文件 保存数据的最简单方式之一是将其写入到文件中。通过将输出写入文件&#xff0c;即便关闭包含输出的终端窗口&#xff0c;这些输出也依然存在…

五年携手共话,FISCO BCOS为数实相生注入新动能

2月24日&#xff0c;作为深圳国际金融科技节系列活动之一&#xff0c;由深圳市地方金融监督管理局指导&#xff0c;微众银行、金链盟主办的“2022产业区块链年度峰会暨FISCO BCOS五周年生态大会”&#xff08;下称“大会”&#xff09;在深圳顺利召开。本次大会以“数实相生&am…

驱动程序开发:Buildroot根文件系统构建并加载驱动文件xxx.ko测试

目录一、buildroot根文件系统简介二、buildroot下载三、buildroot构建根文件系统1、配置 buildroot①配置 Target options②配置 Toolchain③配置 System configuration④配置 Filesystem images⑤禁止编译 Linux 内核和 uboot2、 buildroot 下的 busybox 配置①修改 Makefile&…

hive支持的数据类型

目录 一、hive数据类型 1.基础型 2.复杂型 二、类型转换 1.隐式转换 2.显示转换 一、hive数据类型 1.基础型 数据类型长度大小示例TINYINT1字节有符号整数&#xff0c;范围&#xff1a;-128~12710YSMALLINT2字节有符号整数&#xff0c;范围&#xff1a;-32768~3276710SI…

【解锁技能】学会Python条件语句的终极指南!

文章目录前言一. python条件语句的介绍1.1 什么是条件语句1.2 条件语句的语法1.3 关于内置函数bool()二. 分支语句之单分支三. 多分支语句3.1 二分支语句3.2 多分支语句3.3 嵌套循环总结前言 &#x1f3e0;个人主页&#xff1a;欢迎访问 沐风晓月的博客 &#x1f9d1;个人简介&…

Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信

一 摘要 Softing OPC Tunnel是dataFEED OPC Suite的一个组件&#xff0c;可避免跨设备OPC Classic通信中出现的DCOM配置问题&#xff0c;同时可保证跨网络数据交换的高性能和可靠性。OPC Tunnel内部集成的存储转发功能&#xff0c;可在连接中断时缓存数据&#xff0c;并在重新…

html的常见标签使用

目录 1.vscode基础操作 2.html基础 语法 3.HTML文件的基本结构标签 4.注释标签 5.标题标签 6.段落标签:p 7.格式化标签 8.图片标签:img 绝对路径 相对路径 网络路径 alt属性 title属性 width/height属性 9.超链接标签:a 10.表格标签 11.列表标签 有序列表 无…

Hbase -- Compact工具梳理

1. 背景 当前&#xff0c;线上HBase集群的自动Major Compact是关闭的&#xff0c;我们选择在凌晨业务空闲的时候进行手动触发Major Compact&#xff0c;Compact工具就是在运维平台上对资源组、RS、表进行Major Compact。目前线上有2种版本的Compact程序&#xff1a;Compact_v1…

html 懒加载图片实现方法

懒加载逻辑 一般如果场景比较大&#xff0c;滚动条很长&#xff0c;图片比较多的情况下&#xff0c;不使用赖加载图片会一下子把资源都加载&#xff0c;导致性能很慢&#xff0c;甚至没有滚动到下面也加载了&#xff0c;很浪费资源现在通过滚动事件来处理图片加载,我们先吧要显…

Vue项目中components组件的使用笔记

目录 前言 一、components和component的区别&#xff1f; 二、components使用的步骤 1.创建组件vue文件 2.引入组件 3.注册组件 4.应用组件 总结 前言 本文章&#xff0c;只是初步了解记录components的使用步骤。 一、components和component的区别&#xff1f; compo…

【Python学习笔记】第二十一节 Python Lambda 函数

Python 提供了非常多的库和内置函数。有不同的方法可以执行相同的任务&#xff0c;而在 Python 中&#xff0c;有个万能之王函数&#xff1a;lambda 函数&#xff0c;它以不同的方式在任何地方使用。一、Lambda 函数简介在 Python 中&#xff0c;函数可以接受一个或多个位置参数…

火爆全网的ChatGPT 和AI 可以为项目经理做什么?

作为一款人工智能聊天机器人&#xff0c;ChatGPT因其逼真和人性化的特性而风靡全球&#xff0c;无疑是当今技术的新流行。人工智能 (AI) 有可能彻底改变许多行业&#xff0c;包括项目管理&#xff0c;及时了解最新技术以及它如何影响你的工作至关重要。于是&#xff0c;我们与C…

C++ string类(二)及深浅拷贝

一、string类方法使用举例1.迭代器迭代器本质&#xff1a;指针&#xff08;理解&#xff09;迭代器&#xff1a;正向迭代器&#xff1a; begin() | end() 反向迭代器&#xff1a; rbegin() | rend()2.find使用//找到s中某个字符 void TestString3() {string s("AAADEFNUIE…

分层测试(1)分层测试是什么?【必备】

1. 什么是分层测试&#xff1f; 分层测试是通过对质量问题分类、分层来保证整体系统质量的测试体系。 模块内通过接口测试保证模块质量&#xff0c;多模块之间通过集成测试保证通信路径和模块间交互质量&#xff0c;整体系统通过端到端用例对核心业务场景进行验证&#xff0c…

Spring Boot 3.0系列【2】部署篇之使用GraalVM构建原生镜像

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本2.7.0 文章目录概述JIT & AOTJIT &#xff08;动态编译&#xff09;AOT&#xff08;静态编译&#xff09;GraalVM简介运行模式Native Image&#xff08;原生镜像&#xff09;…