java 启动查看jar包加载顺序并设置classpath

java,启动,查看,jar,加载,顺序,设置,classpath · 浏览次数 : 1082

小编点评

**本文分析** **jar包加载顺序** * 首先加载**java核心api**目录下的类文件。 * 如果没有定义类路径,则从**java扩展jar包**目录中加载。 * 如果类文件已经被加载到内存中,则后面的相同类文件就不会被加载。 * 按照**类路径顺序**加载jar包。 * 如果存在多个类路径,则以**分号**分隔加载。 * 也可以使用**英文冒号**进行分隔。 **设置类路径** * 通过**`java.class.path`**属性设置类路径。 * 可以设置多个类路径,以分号分隔。 * 每个类路径以**`D:`**开头,并在类名中使用**分号**隔开。 **代码查看类路径** * 通过**`System.getProperty("java.class.path")****获取类路径。 * 可以使用**`log.error()`**将类路径打印到日志中。 **总结** 通过以上分析,我们了解到jar包加载顺序及其设置方法。通过配置类路径,我们可以控制哪些类文件被加载到内存中。

正文

本文为博主原创,转载请注明出处:

1.idea查看jar包加载顺序

  jdk8 可以通过     -XX:+TraceClassPaths    参数进行查看jar包的加载顺序

  jdk11 可以通过     -Xlog:class+path=info   参数进行查看jar包的加载顺序

  idea 启动查看配置方式如下:

  

 

进行服务启动之后,会在控制台打印jvm加载时的classpath参数;示例如下:

  

  在控制台 搜索 java.class.path 就能看到具体的配置;java.class.path 的顺序就是 jvm 加载class以及 jar包的顺序;排在前面的会优先加载;

 2.tomcat启动加载顺序

当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?

加载顺序:

  1. $java_home/lib 目录下的java核心api

  2. $java_home/lib/ext 目录下的java扩展jar包

  3. java -classpath/-Djava.class.path所指的目录下的类与jar包

  4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

  5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

  6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

  7. 我们的项目路径/WEB-INF/classes下的class文件

  8. 我们的项目路径/WEB-INF/lib下的jar文件

  在同一个文件夹下,jar包是按顺序从上到下依次加载

  由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。

3.设置 classpath 

  设置多个类路径;多个类路径以分号分隔

D:> java -classpath C:\java\MyClasse1;C:\java\MyClass2 com.yiibai.MainApp

  设置多个jar的路径顺序:多个jar使用 英文冒号进行分割

-classpath  /data/tomcat_8081/bin/bootstrap.jar:/data/tomcat_8081/bin/tomcat-juli.jar 

4.代码查看 classpath 

String javaClassPath = System.getProperty("java.class.path");
log.error("----- {}",javaClassPath);

 

与java 启动查看jar包加载顺序并设置classpath相似的内容:

java 启动查看jar包加载顺序并设置classpath

本文为博主原创,转载请注明出处: 1.idea查看jar包加载顺序 jdk8 可以通过 -XX:+TraceClassPaths 参数进行查看jar包的加载顺序 jdk11 可以通过 -Xlog:class+path=info 参数进行查看jar包的加载顺序 idea 启动查看配置方式如下: 进行服

java通过idea启动查看类加载来源信息

本文为博主原创,转载请注明出处: jdk 8 环境时,可以在启动的环境中配置 :-XX:+TraceClassLoading 进行启动时查看 jdk 11 环境时,可以在启动的JVM 环境中配置 : -Xlog:class+load=info 进行查看 也可以 使用 : -verbose:class

[转帖]java启动jar包设置启动参数

目录 一、代码介绍 1.代码: 二、linux命令 1.命令 三、idea本地调试 1.找到Edit Configurations 2.修改Edit Configurations 参数 3.Edit Configurations 参数介绍 4.VM option 单个参数效果展示 5.VM opti

[转帖]java -jar 参数说明

jvm 选项 Java启动参数共分为三类; 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不

[转帖]【JVM】常用虚拟机参数及实例

常用参数表 参数描述-XX:+PrintGC启动java虚拟机后,只要遇到gc,就打印日志-XX:+PrintGCDetailsgc发生时,打印更详细的日志-XX:+PrintHeapAtGC每一次GC后,都打印堆信息-XX:+PrintGCTimeStampsgc发生时,额外打印gc时间,该时间为

一文了解JVM面试篇(上)

Java内存区域 1、如何解释 Java 堆空间及 GC? 当通过 Java 命令启动 Java 进程的时候,会为它分配内存。内存的一部分用于创建 堆空间,当程序中创建对象的时候,就从对空间中分配内存。GC 是 JVM 内部的一 个进程,回收无效对象的内存用于将来的分配。 2、JVM 的主要组成部分

[转帖]Java -Dfile.encoding=UTF-8 干掉乱码

https://www.cnblogs.com/fnlingnzb-learner/p/10682304.html 遭遇乱码问题的来龙去脉 这两天写了一个 Java 程序来玩,结果又遭遇了以前遇到过很多次的乱码问题,具体描述一下:在 Mac 系统里面,常用的 Java 程序启动方式有如下几种:1.通

[转帖]JVM 参数

https://www.cnblogs.com/xiaojiesir/p/15636100.html 我们可以在启动 Java 命令时指定不同的 JVM 参数,让 JVM 调整自己的运行状态和行为,内存管理和垃圾回收的 GC 算法,添加和处理调试和诊断信息等等。 JVM参数选项 类型一:标准参数选项

[转帖]springboot中使用skywalking实现日志追踪

文章目录 SkyWalking分布式追踪系统介绍主要架构 环境引入依赖配置Log4j2下载编译好的8.7.0版本包使用探针实现日志追踪启动脚本启动Java服务访问服务 使用UI切换存储方式 SkyWalking分布式追踪系统 介绍 Skywalking是一个国产的开源框架,2015年有吴晟个人开源,

文盘Rust -- 把程序作为守护进程启动

当我们写完一个服务端程序,需要上线部署的时候,或多或少都会和操作系统的守护进程打交道,毕竟谁也不希望shell关闭既停服。今天我们就来聊聊这个事儿。 最早大家部署应用的通常操作是 “nohup xxxx &”,别说像weblogic 或者其他java 容器有启动脚本,里面其实也差不多;很喜欢 ngi