java - java程序启动时会发生什么?

标签 java jar jvm classloader executable-jar

最近接触了Java类加载器,突然意识到,没有完全理解当有人调用时发生了什么step-by-step

java -jar App.jar

我猜

  1. 创建了一个新的 JVM 实例
  2. 使用ClassLoader加载主类和其他类
  3. 字节码从main()方法开始执行

但我仍然认为还有很多事情我需要了解更多。

  • 谁以及如何决定哪些类应该在启动时加载以及哪些需要时加载?

我发现了两个相关问题,但没有解释如何将其应用于 Java 现实。

What happens when a computer program runs?

What happens when you run a program?

最佳答案

•Who and how decides which classes should be loaded at startup and which once needed?

我们需要了解 java 类加载的基础知识。最初引导类加载器(它作为 VM 本身的一部分在本地实现)负责加载核心系统类。然后还有其他类加载器以及扩展、系统、用户定义(可选)类加载器,它们决定何时以及如何加载类。 Fundamentals of class loading

关于java - java程序启动时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13927217/

相关文章:

java - Guava 缓存 : Put operation triggers removal listener

java - JVM 字节码浮点否定 : not allowed but possible?

java - Java VM 对堆栈红色区域的访问无效

Java 内存感知缓存

java - XML 具有 xsi :type attribute 时 Sax 解析异常

java - 如何使用 Monticore 生成的 PrettyPrinter 将 AST 从 ASTEmbeddedAutomaton 打印到文本文件?

java - 空对象引用上的 ListView.setAdapter(android.widget.ListAdapter)'

java - 在另一个项目 Eclipse 中引用项目的输出 JAR

java - 在不破坏代码的情况下删除未使用的库

java - 从JAR执行时,项目无法读取.wav文件