从Jar文件加载Java类

从Jar文件加载Java类,java,jvm,Java,Jvm,我有一个包含多个类的巨大jar文件,但我的应用程序中的对象图只需要两个类a和B(以及JVM所需的其他默认类)。如果是这样,Java会将整个Jar文件加载到内存中吗?我的意思是我应该创建另一个只包含类A和B的Jar文件吗?我已经阅读了Java中的类加载机制,我猜Java将只加载默认类之外的必需类,但我不确定。谢谢你抽出时间 Java会将整个Jar文件加载到内存中吗 如果将.jar文件放在类路径上-是的,JVM将把整个.jar加载到为进程分配的内存中 我的意思是我应该创建另一个只包含类A和B的Jar

我有一个包含多个类的巨大jar文件,但我的应用程序中的对象图只需要两个类a和B(以及JVM所需的其他默认类)。如果是这样,Java会将整个Jar文件加载到内存中吗?我的意思是我应该创建另一个只包含类A和B的Jar文件吗?我已经阅读了Java中的类加载机制,我猜Java将只加载默认类之外的必需类,但我不确定。谢谢你抽出时间

Java会将整个Jar文件加载到内存中吗

如果将
.jar
文件放在类路径上-是的,JVM将把整个
.jar
加载到为进程分配的内存中

我的意思是我应该创建另一个只包含类A和B的Jar文件吗

看起来它(还)没有使用,而且很可能,最好将这两个类分别打包,是的

我已经阅读了Java中的类加载机制,我猜Java将只加载默认类之外的必需类,但我不确定

尽管
.jar
将被加载到内存中,但如果在应用程序中根本不使用类,Java将不会加载它们

当应用程序需要它们时,将加载它们

当类被使用/需要时,Java运行时环境调用Java
ClassLoader
,这个(这些)类加载器将类动态加载到内存中

类是必需的/使用的,表示以下内容:

  • 类被实例化(其对象被创建)
  • 访问/引用该类的静态成员(方法或字段)
  • 类通过反射进行访问
  • 类已从命令行/shell运行

它将加载应用程序在运行时使用的类。关于创建另一个jar,答案是否定的,您不需要为您的应用程序创建多个jar。谢谢。这意味着,Jar文件将完全加载到内存中,但只有少数项将根据应用程序中的内容解析到类中。我的理解正确吗?如果是这样的话,减少Jar文件的大小将有助于减少内存占用,即使其中的大多数类不会被使用。我说得对吗?