首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中动态加载Jar文件

在java中动态加载Jar文件
EN

Stack Overflow用户
提问于 2014-12-07 16:42:00
回答 1查看 1.2K关注 0票数 3

我已经读了很多关于JIT和JVM的文章,我正在试图找出一些东西,我希望有人能帮助我。

当我们编写包含外部JAR的java程序时,例如:包含: ExternalJar.jar:

代码语言:javascript
复制
ClassA.class
ClassB.class
ClassC.class

问题:

  1. 如果JAR从未被使用过: JIT是否仍将JAR中包含的类编译为初始化阶段(运行应用程序的JVM的第一阶段)中的机器代码?或者像DLL一样,只有当我们实际上从JAR中的一个类调用一个方法时,JAR才会在运行时加载?
  2. 如果1的答案是当我们实际上从JAR中的一个类调用一个方法时:那么使用JIT的好处是什么呢?JIT应该通过在应用程序启动阶段执行繁重的工作来改善运行时。
  3. JIT是否必须编译JAR中的所有类,例如,如果我们使用: ClassB.MethodB();

ClassA和ClassC也会因为它们在同一个JAR中而被编译吗?

  1. 包含基本java框架类的rt.jar怎么办?例如,如果我调用: System.out.println("");

System.class是否也被编译成机器代码(无论是在运行时启动时还是在运行时实际调用该方法),还是这些类是否存在某种已经缓存的机器代码?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-12-08 14:16:24

如果JAR从未被使用过: JIT是否仍将JAR中包含的类编译为初始化阶段(运行应用程序的JVM的第一阶段)中的机器代码?或者像DLL一样,只有当我们实际上从JAR中的一个类调用一个方法时,JAR才会在运行时加载?

答: JAR只在运行时加载,即使JAR中的类也是第一次在引用中加载类。方法编译通常是基于热点原理进行的。

如果1的答案是当我们实际上从JAR中的一个类调用一个方法时:那么使用JIT的好处是什么呢?JIT应该通过在应用程序启动阶段执行繁重的工作来改善运行时。

注释:JIT通常编译大量使用的方法。这种大量使用是根据运行时信息确定的。JIT剂量可缩短启动时间。

JIT是否必须编译JAR中的所有类,例如,如果我们使用:

答:不

ClassB.MethodB();ClassA和ClassC也会被编译,因为它们在同一个JAR中吗?

包含基本java框架类的rt.jar怎么办?例如,如果我调用:

System.out.println("");是否也会将System.class编译为机器代码(无论是在运行时启动时还是在运行时实际调用该方法),还是这些类是否存在某种已经缓存的机器代码?

答:不,JIT只编译使用频繁的方法。它并不是在同一个类中编译所有其他方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27344989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档