面试题:Java 中堆和栈的区别是什么?
在Java中,堆(Heap)和栈(Stack)是两种不同的内存区域,它们各自服务于不同的目的,并且有着显著的区别。以下是堆和栈的主要区别: 1. 内存分配方式 堆:堆是一个共享的内存区域,所有的对象...
面试题:什么是 Java 中的直接内存(堆外内存)?
在Java中,直接内存(也称为堆外内存)是指不位于JVM堆空间中的内存区域。它独立于Java堆之外,通常通过java.nio.ByteBuffer的allocateDirect方法或其他NIO工具类进行分配。直接内存允许数据存...
面试题:什么是 Java 中的常量池?
Java中的常量池是一个重要的运行时数据结构,主要用于存储编译期已知的字面量以及动态生成的符号引用等内容。它在类加载、链接和运行过程中扮演着关键角色。常量池主要分为两种类型:静态常量池...
面试题:你了解 Java 的类加载器吗?
类加载器是 Java 虚拟机(JVM)的一个核心组成部分,负责在程序运行时动态地将 .class 文件(字节码)加载到 JVM 中,并将其转换为 Java 的 java.lang.Class 对象。 类加载器使得 Java 能够在运...
面试题:什么是 Java 中的 JIT(Just-In-Time)?
Java中的JIT(Just-In-Time)编译器是Java虚拟机(JVM)的一部分,用于提高Java应用程序的执行效率。Java源代码首先被编译成字节码(bytecode),这是一种与平台无关的中间表示形式。 当运行这...
面试题:JIT 编译后的代码存在哪?
JIT(Just-In-Time,即时编译)编译后的代码(即本地机器码)主要存储在 Java 虚拟机(JVM)的 Code Cache(代码缓存区) 中。 以下是更详细的解释: Code Cache(代码缓存区): 这是 JVM 堆外...
面试题:什么是 Java 的 AOT(Ahead-Of-Time)?
Java的AOT(Ahead-Of-Time)编译是指在程序运行之前将Java字节码转换成本地机器代码的过程,与之相对的是JIT(Just-In-Time)编译,它是在程序运行时动态地进行编译。 AOT编译的主要目标是提高...
面试题:你了解 Java 的逃逸分析吗?
逃逸分析是 Java 虚拟机(JVM)在运行时进行的一项动态分析技术,主要用于判断一个对象的引用是否可能“逃逸”出当前线程或方法的范围。 如果 JVM 能够确定一个对象不会逃逸到其他线程或方法中...
面试题:Java 中的强引用、软引用、弱引用和虚引用分别是什么?
在Java中,引用类型主要包括强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。每种引用类型都有其特定的用途和应用场景,下面...
面试题:Java 中常见的垃圾收集器有哪些?
在Java中,垃圾收集器是Java虚拟机(JVM)的一部分,负责自动管理内存,回收不再使用的对象所占用的内存。 随着Java的发展,出现了多种不同的垃圾收集器,每种都有其特定的应用场景和优化目标。...