面试问题:What JVM does when we run “java A” , A is java class.
我解释说:JVM创建内存,尝试使用Java反射API找出A java类。
JVM加载java.lang包。
任何人都请解释一下JVM的端到端功能是什么!
答案 0 :(得分:1)
大多数编程语言将源代码直接编译为机器代码,适合在特定的微处理器架构上执行。与Java的不同之处在于它使用字节码。
Java字节码在特殊类型的微处理器上执行。但是,Java首次发布时,没有可用的微处理器。相反,处理器体系结构由所谓的“虚拟机”模拟。该虚拟机是真实Java处理器的仿真。唯一的区别是虚拟机没有在CPU上运行 - 它是在主机的CPU上模拟的。
Java虚拟机负责解释Java字节码,并将其转换为操作或操作系统调用。 Java虚拟机构成了大型系统Java Runtime Environment(JRE)的一部分。每个操作系统和CPU架构都需要不同的JRE。 JRE包含一组基类,它们是基本Java API的实现,也是JVM。
编辑:有关详细信息,请点击oracle link
答案 1 :(得分:1)
启动JVM进程,初始化bootstrap / system / extension类加载器的类路径,调用Class.forName(" A")
然后jvm寻找班级" A"通过类加载器层次结构(bootstrap - >扩展 - >系统)。如果找到,则调用静态方法main。
这个简单解释中没有涉及的主题:
注意:Java不直接加载java.lang类 - 它调用Class.forName并递归加载所有必需的依赖项。但是,Java5 +使用所谓的CDS(类数据共享)来快速加载预编译的系统类集。
答案 2 :(得分:1)
JVM太复杂了,无法在此描述。有一个优秀的资源由其中一个创建者编写,以便您可以掌握JVM。 The Java Virtual Machine
在您的情况下,当您键入“java A”时,将启动一个新的JVM,“bootstrap类加载器”负责首先将关键的Java类(如java.lang.Object和其他运行时代码)加载到内存中。运行时类打包在JRE / lib / rt.jar文件中。在JVM中,每个类都由java.lang.ClassLoader的某个实例加载。 ClassLoader类位于java.lang包中,我们可以自由地将它子类化,以便为类加载添加自己的功能。
从此处了解有关类加载器的更多信息: The basics of Java class loaders