JVM基础之类加载器详解

开始

本文我整理了一些JVM类加载器相关的面试高频知识点,方便同学们复习。

在详细了解JVM知识点之前,我们先引入以下基础的经典面试题:

谈谈你对Java的理解

  • 平台无关性,一次编译到处运行。
  • GC垃圾回收机制:Java无需像C++一样手动管理内存。
  • Java的语言特性:泛型、反射、lambda表达式等。
  • 面向对象:包括封装、继承、多态。
  • Java自身类库如:集合、并发库、网络库以及IO流。
  • 异常处理。

Java 和 C++的区别

  • Java不提供指针直接访问内存,程序的内存更加安全。
  • Java的类是单继承,而C++的类是多继承(Java的接口是可以多继承的)。
  • Java有自动垃圾回收机制,无需手动释放内存。
  • Java可实现平台无关性,一次编译,不同系统平台都能运行。

Java平台无关性是如何实现的?

Java源码首先被编译成字节码,再由不同平台的JVM进行解析,Java语言在不同的平台上运行时不需要重新编译,Java虚拟机在执行字节码的时候会将字节码转换成具体平台上的机器指令。所以Java也是一种编译与解释并存的语言。它即具备编译型语言的特征,也具备解释型语言的特征。

引用维基百科的介绍:

为了改善编译语言的效率而发展出的即时编译技术,已经缩小了这两种语言间的差距。这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成字节码。到执行期时,再将字节码直译,之后执行。Java与LLVM是这种技术的代表产物。

为什么JVM不直接将源码解析成机器码?

  • 准备工作:每次执行前都需要进行各种检查。
  • 兼容性:这样做使得其他语言也能够按照JVM的标准解析成字节码。

JVM的主要组成部分

  • Class Loader:依据特定格式,加载class文件到内存。
  • Execution Engine:对命令进行解析。
  • Native Interface:融合不同开发语言的原生库为Java所用。
  • Runtime Data Area:JVM内存空间结构模型。

你可能感兴趣的:(java,后端)