💖💖💖亲爱的朋友们,热烈欢迎你们来到我的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实用的内容知识,还可以毫无拘束地畅所欲言,尽情分享自己独特的见解。我真诚地期待着你们的到来,愿我们能在这片小小的天地里共同成长,共同进步。💖💖💖
本博客的精华专栏:
1. Java 大厂面试专栏系列:提供大厂面试的相关技巧和经验,助力求职。
2. Java 虚拟机(JVM)专栏系列:深入剖析 JVM 的工作原理和优化方法。
3. Java 技术栈专栏系列:全面涵盖 Java 相关的各种技术。
4. Java 学习路线专栏系列:为不同阶段的学习者规划清晰的学习路径。
5. AI(人工智能)系列:紧跟科技潮流,介绍人工智能的应用和发展趋势。
展望未来,我将持续深入钻研前沿技术,及时推出如人工智能和大数据等相关专题内容。同时,我会努力打造更加活跃的社区氛围,举办技术挑战活动和代码分享会,激发大家的学习热情与创造力。我也会加强与读者的互动,依据大家的反馈不断优化博客的内容和功能。此外,我还会积极拓展合作渠道,与优秀的博主和技术机构携手合作,为大家带来更为丰富的学习资源和机会。
我热切期待能与你们一同在这个小小的网络世界里探索、学习、成长。你们的每一次点赞、关注、评论、打赏和订阅专栏,都是对我最大的支持。让我们一起在知识的海洋中尽情遨游,共同打造一个充满活力与智慧的博客社区。✨✨✨
再次感谢你们的关注与支持。💖💖💖谢谢!现在就访问我的主页。
引言:
在 Java 开发的广袤天地中,JVM(Java Virtual Machine)犹如一座神秘而强大的技术宝库。对于渴望在大厂一展身手的开发者们来说,深入掌握 JVM 的知识是迈向成功的关键阶梯。今天,我们为大家精心整理了来自各大厂的 JVM 面试题及答案解析,带你深入探索 JVM 的奥秘。同时,这仅仅是一个开始,后续我们还将推出九期精彩内容,持续为你的技术提升助力。让我们一同踏上这场精彩的 JVM 之旅,开启技术进阶之门。
正文:
一、阿里巴巴
1.1 什么是 JVM 内存模型?
- 答案: JVM 的内存模型主要涵盖堆、栈、方法区以及程序计数器等部分。其中,堆用于存储对象实例,是 JVM 管理的最大内存区域。栈为线程私有,每个方法的调用都会在栈中创建栈帧,用于存储局部变量、操作数栈和方法返回地址等信息。方法区主要存储已加载的类信息、常量和静态变量等数据。程序计数器则是每个线程私有的,用于指示当前线程执行的字节码指令的位置。
- 解析: 理解 JVM 内存模型是掌握 Java 程序运行机制的基础。比如,我们来看一个简单的 Java 代码示例:public class Test { public static void main(String[] args) { int num = 10; System.out.println(num); } }。在这个例子中,局部变量 num 就存储在栈中,而当我们创建一个对象,如 new Object (),这个对象就会存储在堆中。方法区则存储了 Test 类的信息、常量等。程序计数器会不断地指向当前线程正在执行的字节码指令位置,确保程序的正确执行。堆内存中对象的创建和存储是 Java 程序运行的重要环节。栈的线程私有特性确保了方法调用的独立性和安全性。方法区存储的类信息等数据对于程序的正确运行至关重要。程序计数器则保证了线程切换后的正确恢复执行。
1.2 谈谈你对垃圾回收的理解?
- 答案: 垃圾回收是 JVM 自动管理内存的重要机制,其目的在于回收不再使用的对象所占用的内存,以防止内存泄漏。
- 解析: 垃圾回收是 JVM 的核心功能之一。例如,我们有以下代码:public class GarbageExample { public static void main(String[] args) { Object obj = new Object(); obj = null; } }。在这个例子中,当我们将 obj 赋值为 null 后,原来指向的对象就可能成为垃圾回收的对象。JVM 通过可达性分析等算法,能够判断哪些对象不再被引用,进而对这些对象进行回收。常见的垃圾回收算法包括标记 - 清除算法、复制算法和标记 - 压缩算法等。不同算法各有优缺点,JVM 会根据实际情况选择合适的算法进行垃圾回收,以优化程序性能。
二、腾讯
2.1 强引用、软引用、弱引用、虚引用分别是什么?
- 答案: 强引用是最常见的引用类型,只要强引用存在,对象就不会被回收。软引用在内存不足时会被回收。弱引用在垃圾回收时会被立即回收。虚引用主要用于跟踪对象的垃圾回收,不能单独使用,必须和引用队列一起使用,当对象被回收时,虚引用会被加入到引用队列中。
- 解析: 不同的引用类型在内存管理中发挥着不同的作用。比如,以下代码展示了软引用的使用:import java.lang.ref.SoftReference; public class SoftReferenceExample { public static void main(String[] args) { Object obj = new Object(); SoftReference softRef = new SoftReference<>(obj); obj = null; System.gc(); if (softRef.get()!= null) { System.out.println(“Soft reference is still valid.”); } else { System.out.println(“Soft reference has been cleared due to memory pressure.”); } } }。强引用是我们在代码中最常使用的引用方式,它确保了对象的存在性。软引用可用于实现缓存等功能,在内存紧张时自动释放资源。弱引用的对象在垃圾回收时会迅速被回收,无论内存是否充足。虚引用则主要用于监控对象的回收过程。
2.2 如何判断一个对象是否可以被回收?
- 答案: 通常通过可达性分析来判断一个对象是否可以被回收。如果对象没有任何引用指向它,那么它就可以被回收。
- 解析: 可达性分析是垃圾回收的关键步骤。从一些被称为 “GC Roots” 的对象开始,沿着对象的引用链进行搜索。比如,线程栈中的局部变量、静态变量和常量等都是常见的 GC Roots。如果一个对象没有任何引用链可以到达 GC Roots,那么这个对象就被认为是不可达的,可以被回收。GC Roots 的选择依据是它们在程序运行过程中始终存在,并且可以被直接或间接引用到其他对象。具体来说,对象头的结构中会记录对象的引用信息,通过这些信息可以进行引用链的搜索。
三、百度
3.1 JVM 有哪些垃圾回收算法?
- 答案: 常见的垃圾回收算法有标记 - 清除算法、复制算法和标记 - 压缩算法等。
- 解析: 不同的垃圾回收算法各有特点。我们来看一个具体的例子,假设我们有一个内存区域,使用标记 - 清除算法时,首先会标记出需要回收的对象,然后统一回收其占用的内存,但会产生内存碎片。比如,经过多次垃圾回收后,内存中可能会出现一些不连续的空闲区域。复制算法将内存分为两块,每次只使用其中一块,当这块内存用完时,将存活的对象复制到另一块内存中,然后清理原来的内存,虽不会产生内存碎片,但会浪费一半内存空间。标记 - 压缩算法在标记 - 清除算法基础上进行改进,标记完需要回收的对象后,将存活的对象移动到一端,清理另一端的内存,既避免了内存碎片,又不会浪费过多内存空间。
3.2 什么是 GC Roots?
- 答案: GC Roots 是垃圾回收的根对象,包括线程栈中的局部变量、静态变量和常量等。
- 解析: GC Roots 是判断对象是否可回收的重要依据。在进行可达性分析时,只有从 GC Roots 出发能够到达的对象才被认为是存活的,不能到达的对象则被认为是可回收的。具体来说,线程栈中的局部变量在方法执行过程中始终存在,并且可以直接引用到其他对象。静态变量在类加载后就一直存在于内存中,也可以被间接引用到其他对象。常量在程序运行过程中不会改变,同样可以作为 GC Roots。
四、字节跳动
4.1 介绍一下 JVM 的类加载机制?
- 答案: JVM 的类加载机制包括加载、链接(验证、准备、解析)和初始化三个阶段。
- 解析: 类加载机制是 Java 语言的重要特性。我们以一个简单的类加载过程为例,加载阶段将类的字节码文件加载到内存中,并生成对应的 Class 对象。比如,当我们使用 Class.forName (“com.example.MyClass”) 时,就触发了类的加载过程。链接阶段包括验证、准备和解析三个子阶段。验证阶段检查字节码文件的合法性和安全性,确保不会加载恶意的代码。准备阶段为类的静态变量分配内存并设置默认初始值。解析阶段将类中的符号引用转换为直接引用。初始化阶段执行类的初始化方法,为静态变量赋予正确的初始值。
4.2 什么是类加载器?常见的类加载器有哪些?
- 答案: 类加载器是负责加载类的组件。常见的类加载器包括启动类加载器、扩展类加载器和应用程序类加载器。
- 解析: 类加载器的作用是将类的字节码加载到内存中并生成对应的类对象。启动类加载器负责加载 JVM 核心类库,如 java.lang 包中的类。扩展类加载器负责加载 JVM 的扩展类库,通常位于 jre/lib/ext 目录下。应用程序类加载器负责加载应用程序的类。此外,还可以自定义类加载器以满足特定需求。比如,在一些框架中,可能会使用自定义类加载器来实现热部署等功能。
五、美团
5.1 谈谈你对 JVM 调优的理解?
- 答案: JVM 调优包括调整堆大小、选择合适的垃圾回收器以及优化代码等,以提高程序的性能和稳定性。
- 解析: JVM 调优是一项复杂的工作,需要综合考虑多个因素。对于内存占用较大的程序,可以适当增大堆内存大小。比如,通过 -Xms 和 -Xmx 参数来设置堆内存的初始大小和最大大小。选择合适的垃圾回收器可以根据程序的特点和运行环境来决定。如果对吞吐量要求较高,可以选择并行回收器;如果对响应时间要求较高,可以选择 CMS 回收器或 G1 回收器。优化代码能减少对象创建、避免内存泄漏,减轻垃圾回收压力。例如,避免在循环中创建大量不必要的对象,及时释放不再使用的资源,如数据库连接、文件流等。
5.2 如何查看 JVM 的运行参数?
- 答案: 可以使用 jinfo、jstat 等命令查看 JVM 的运行参数。
- 解析: 了解如何查看 JVM 的运行参数对监控和调优 JVM 非常有帮助。jinfo 命令可查看和修改 JVM 的系统属性和启动参数。比如,我们可以使用 jinfo -flag HeapSize 来查看指定进程的堆大小设置。jstat 命令可查看 JVM 的各种统计信息,如堆内存使用情况和垃圾回收情况等。例如,jstat -gc 可以显示垃圾回收的统计信息,帮助我们了解 JVM 的内存使用情况和垃圾回收效率。
六、京东
6.1 JVM 中如何设置堆内存大小?
- 答案: 可以通过 -Xms 和 -Xmx 参数来设置堆内存的初始大小和最大大小。例如,-Xms1024m -Xmx2048m 表示堆内存初始大小为 1024MB,最大为 2024MB。
- 解析: 合理设置堆内存大小对程序性能至关重要。如果初始大小设置过小,可能会导致频繁的垃圾回收;如果最大大小设置过大,可能会浪费内存资源。我们可以根据程序的实际需求来调整这两个参数。比如,对于一个内存占用较大的数据分析程序,我们可能需要将堆内存设置得较大一些,以避免频繁的垃圾回收影响性能。而对于一个小型的命令行工具程序,堆内存可以设置得相对较小。
6.2 什么是 JVM 的方法区?它主要存储什么内容?
- 答案: 方法区是 JVM 内存中的一块区域,主要存储已加载的类信息、常量、静态变量和即时编译器编译后的代码等数据。
- 解析: 方法区在 JVM 中起着重要作用,存储着程序运行所需的类信息等数据。随着 JDK 的发展,方法区的实现也在不断变化,在 JDK 8 及以后,方法区的实现变为元空间,它不再在 JVM 的堆内存中,而是使用本地内存。例如,当我们加载一个类时,类的信息会被存储在方法区中。常量池中的常量也会存储在方法区中,在程序运行过程中可以被直接引用。静态变量同样存储在方法区中,并且在类加载后就可以被访问。
七、华为
7.1 JVM 的垃圾回收器有哪些类型?分别适用于什么场景?
- 答案: JVM 的垃圾回收器主要有串行回收器、并行回收器、并发标记清除(CMS)回收器和 G1 回收器等。串行回收器适用于小型应用和单 CPU 环境;并行回收器适用于对吞吐量要求较高的应用;CMS 回收器适用于对响应时间要求较高的应用;G1 回收器适用于大内存、多 CPU 的服务器环境,可以同时追求高吞吐量和低停顿时间。
- 解析: 不同的垃圾回收器有不同的特点和适用场景。我们可以通过实际测试数据来对比不同回收器的性能。比如,在一个小型的单机应用中,使用串行回收器可能就足够了,因为它的开销较小。对于一个需要处理大量数据的批处理程序,对吞吐量要求较高,可以选择并行回收器。如果是一个对响应时间要求非常严格的在线应用,CMS 回收器可能更合适。而对于大内存、多 CPU 的服务器环境,G1 回收器可以更好地管理内存,同时追求高吞吐量和低停顿时间。
7.2 如何分析 JVM 的垃圾回收日志?
- 答案: 可以通过分析垃圾回收日志中的信息,如垃圾回收的时间、次数、回收的对象数量等,来了解 JVM 的内存使用情况和垃圾回收的效率。可以使用工具如 GCViewer 等来可视化分析垃圾回收日志。
- 解析: 分析垃圾回收日志有助于发现潜在的内存问题和性能瓶颈,从而进行相应的优化。例如,我们可以通过查看垃圾回收日志中的时间信息,了解每次垃圾回收所花费的时间。如果发现垃圾回收时间过长,可能意味着内存设置不合理或者存在内存泄漏等问题。回收的对象数量也可以反映程序中对象的创建和回收情况,如果回收的对象数量过多,可能需要优化代码,减少不必要的对象创建。使用工具如 GCViewer 可以将垃圾回收日志可视化,更加直观地了解 JVM 的内存使用情况和垃圾回收效率。
八、网易
8.1 什么是对象的晋升?
- 答案: 对象在堆内存中的新生代中经过多次垃圾回收后仍然存活,就会被晋升到老年代。
- 解析: JVM 的堆内存分为新生代和老年代。对象通常在新生代中创建,随着垃圾回收的进行,一些存活时间较长的对象会被晋升到老年代,以减少垃圾回收的频率。例如,在新生代中使用复制算法进行垃圾回收,当一个对象经过多次垃圾回收后仍然存活,它就会被晋升到老年代。这样可以减少在新生代中频繁进行垃圾回收的开销。
8.2 如何避免内存泄漏?
- 答案: 避免内存泄漏可以通过及时释放不再使用的对象引用、避免循环引用、正确使用集合类等方式。在代码中要注意资源的释放,如关闭数据库连接、文件流等。
- 解析: 内存泄漏是指程序中不再使用的对象占用的内存没有被及时释放,导致内存资源的浪费和程序性能的下降。比如,以下代码可能会导致内存泄漏:import java.util.ArrayList; import java.util.List; public class MemoryLeakExample { private static List list = new ArrayList<>(); public static void main(String[] args) { while (true) { Object obj = new Object(); list.add(obj); } } }。在这个例子中,不断地创建对象并添加到列表中,而列表没有被及时清理,最终会导致内存泄漏。避免内存泄漏需要在编程中养成良好的习惯。及时释放不再使用的对象引用,避免循环引用,可以使用弱引用和软引用来管理对象的生命周期。同时,正确使用集合类,避免在集合中存储不必要的对象。在使用资源时,如数据库连接、文件流等,要确保在使用完毕后及时关闭,释放资源。
九、拼多多
9.1 JVM 的堆内存划分成哪些区域?各有什么作用?
- 答案: JVM 的堆内存主要划分为新生代和老年代。新生代又分为 Eden 区、Survivor 区(From Survivor 和 To Survivor)。Eden 区是新对象创建的主要区域;Survivor 区用于存放经过一次垃圾回收后仍然存活的对象;老年代主要存放生命周期较长的对象。
- 解析: 了解堆内存的划分有助于理解对象在堆中的分配和垃圾回收的过程。不同的区域有不同的垃圾回收策略,以提高垃圾回收的效率。例如,当我们创建一个新对象时,首先会在 Eden 区分配内存。如果 Eden 区满了,就会触发一次 Minor GC,将存活的对象复制到 Survivor 区。经过多次 Minor GC 后,仍然存活的对象会被晋升到老年代。老年代一般使用标记 - 清除或标记 - 压缩算法进行垃圾回收,因为老年代中的对象通常生命周期较长,不适合使用复制算法。
9.2 什么是 JVM 的逃逸分析?
- 答案: 逃逸分析是一种在编译阶段进行的优化技术,它分析对象的作用域,判断对象是否逃逸出方法或线程。如果对象没有逃逸出方法或线程,可以进行一些优化,如栈上分配对象、标量替换等。
- 解析: 逃逸分析可以提高程序的性能,减少内存分配和垃圾回收的压力。比如,以下代码中,对象 obj 没有逃逸出方法,所以可以进行栈上分配:public class EscapeAnalysisExample { public static void main(String[] args) { method(); } public static void method() { Object obj = new Object(); // do something with obj } }。如果对象逃逸出方法或线程,就需要在堆上分配内存,这会增加垃圾回收的压力。通过逃逸分析,JVM 可以在编译阶段进行优化,提高程序的性能。
十、小米
10.1 JVM 如何处理异常?
- 答案: 当程序中发生异常时,JVM 会查找相应的异常处理代码。如果在当前方法中没有找到合适的异常处理代码,会将异常向上抛出,直到找到合适的异常处理代码或者到达程序的顶层。如果在整个程序中都没有找到合适的异常处理代码,JVM 会终止程序并打印异常信息。
- 解析: 正确处理异常对于程序的稳定性非常重要。在 Java 中,可以使用 try-catch 语句来捕获和处理异常。例如,在一个分布式系统中,当某个节点出现网络故障导致通信异常时,JVM 会根据异常处理机制进行处理。如果在通信的方法中有 try-catch 块来处理这种网络异常,就可以尝试重新连接或者采取其他恢复措施。如果当前方法没有处理这个异常,它会被抛给调用这个方法的方法继续寻找处理代码。如果一直到程序的顶层都没有找到合适的异常处理代码,JVM 就会终止程序,并打印详细的异常信息,帮助开发者快速定位问题。
10.2 如何查看 JVM 的线程信息?
- 答案: 可以使用 jstack 命令来查看 JVM 的线程信息,包括线程的状态、堆栈信息等。
- 解析: 了解 JVM 的线程信息可以帮助我们分析程序的性能问题和死锁等情况。比如在一个高并发的电商系统中,如果出现响应时间变长或者系统卡顿的情况,我们可以使用 jstack 命令来查看线程信息。通过分析线程的状态和堆栈信息,可以确定哪些线程在执行哪些任务,是否有线程处于阻塞状态,以及是否存在死锁的情况。如果发现有多个线程都在等待某个资源,而这个资源又被另一个线程持有,就可能存在死锁。通过查看线程信息,我们可以快速定位问题并采取相应的解决措施。
结束语:
通过对这些大厂 JVM 面试题的深入解析,相信你对 JVM 的理解更加深刻了。JVM 作为 Java 开发的核心技术之一,其知识的掌握程度直接关系到你的职业发展。请持续关注我们,后续九期精彩内容将为你带来更深入的 JVM 知识探索,让我们一起在 Java 技术的海洋中乘风破浪,勇攀高峰。
如果你对这些内容有任何疑问、见解或者想要分享的经验,欢迎在评论区留言。你也可以提出你在 JVM 学习过程中遇到的问题,我们一起探讨交流,共同进步。
- Java 面试题 ——JVM 大厂篇之 Java 工程师必备:顶尖工具助你全面监控和分析 CMS GC 性能(2)(最新)
- Java面试题–JVM大厂篇之Java工程师必备:顶尖工具助你全面监控和分析CMS GC性能(1)(最新)
- Java面试题–JVM大厂篇之未来已来:为什么ZGC是大规模Java应用的终极武器?(最新)
- AI 音乐风暴:创造与颠覆的交响(最新)
- 编程风暴:勇破挫折,铸就传奇(最新)
- Java面试题–JVM大厂篇之低停顿、高性能:深入解析ZGC的优势(最新)
- Java面试题–JVM大厂篇之解密ZGC:让你的Java应用高效飞驰(最新)
- Java面试题–JVM大厂篇之掌控Java未来:深入剖析ZGC的低停顿垃圾回收机制(最新)
- GPT-5 惊涛来袭:铸就智能新传奇(最新)
- AI 时代风暴:程序员的核心竞争力大揭秘(最新)
- Java面试题–JVM大厂篇之Java新神器ZGC:颠覆你的垃圾回收认知!(最新)
- Java面试题–JVM大厂篇之揭秘:如何通过优化 CMS GC 提升各行业服务器响应速度(最新)
- “低代码” 风暴:重塑软件开发新未来(最新)
- 程序员如何平衡日常编码工作与提升式学习?–编程之路:平衡与成长的艺术(最新)
- 编程学习笔记秘籍:开启高效学习之旅(最新)
- Java面试题–JVM大厂篇之高并发Java应用的秘密武器:深入剖析GC优化实战案例(最新)
- Java面试题–JVM大厂篇之实战解析:如何通过CMS GC优化大规模Java应用的响应时间(最新)
- Java面试题–JVM大厂篇(1-10)
- Java面试题–JVM大厂篇之Java虚拟机(JVM)面试题:涨知识,拿大厂Offer(11-20)
- Java面试题–JVM大厂篇之JVM面试指南:掌握这10个问题,大厂Offer轻松拿
- Java面试题–JVM大厂篇之Java程序员必学:JVM架构完全解读
- Java面试题–JVM大厂篇之以JVM新特性看Java的进化之路:从Loom到Amber的技术篇章
- Java面试题–JVM大厂篇之深入探索JVM:大厂面试官心中的那些秘密题库
- Java面试题–JVM大厂篇之高级Java开发者的自我修养:深入剖析JVM垃圾回收机制及面试要点
- Java面试题–JVM大厂篇之从新手到专家:深入探索JVM垃圾回收–开端篇
- Java面试题–JVM大厂篇之Java性能优化:垃圾回收算法的神秘面纱揭开!
- Java面试题–JVM大厂篇之揭秘Java世界的清洁工——JVM垃圾回收机制
- Java面试题–JVM大厂篇之掌握JVM性能优化:选择合适的垃圾回收器
- Java面试题–JVM大厂篇之深入了解Java虚拟机(JVM):工作机制与优化策略
- Java面试题–JVM大厂篇之深入解析JVM运行时数据区:Java开发者必读
- Java面试题–JVM大厂篇之从零开始掌握JVM:解锁Java程序的强大潜力
- Java面试题–JVM大厂篇之深入了解G1 GC:大型Java应用的性能优化利器
- Java面试题–JVM大厂篇之深入了解G1 GC:高并发、响应时间敏感应用的最佳选择
- Java面试题–JVM大厂篇之G1 GC的分区管理方式如何减少应用线程的影响
- Java面试题–JVM大厂篇之深入解析G1 GC——革新Java垃圾回收机制
- Java面试题–JVM大厂篇之深入探讨Serial GC的应用场景
- Java面试题–JVM大厂篇之Serial GC在JVM中有哪些优点和局限性
- Java面试题–JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别
- Java面试题–JVM大厂篇之通过参数配置来优化Serial GC的性能
- Java面试题–JVM大厂篇之深入分析Parallel GC:从原理到优化
- Java面试题–JVM大厂篇之破解Java性能瓶颈!深入理解Parallel GC并优化你的应用
- Java面试题–JVM大厂篇之全面掌握Parallel GC参数配置:实战指南
- Java面试题–JVM大厂篇之Parallel GC与其他垃圾回收器的对比与选择
- Java面试题–JVM大厂篇之Java中Parallel GC的调优技巧与最佳实践
- Java面试题–JVM大厂篇之JVM监控与GC日志分析:优化Parallel GC性能的重要工具
- Java面试题–JVM大厂篇之针对频繁的Minor GC问题,有哪些优化对象创建与使用的技巧可以分享?
- Java面试题–JVM大厂篇之JVM 内存管理深度探秘:原理与实战
- Java面试题–JVM大厂篇之破解 JVM 性能瓶颈:实战优化策略大全
- Java面试题–JVM大厂篇之JVM 垃圾回收器大比拼:谁是最佳选择
- Java面试题–JVM大厂篇之从原理到实践:JVM 字节码优化秘籍
- Java面试题–JVM大厂篇之揭开CMS GC的神秘面纱:从原理到应用,一文带你全面掌握
- Java面试题–JVM大厂篇之JVM 调优实战:让你的应用飞起来
- Java面试题–JVM大厂篇之CMS GC调优宝典:从默认配置到高级技巧,Java性能提升的终极指南
- Java面试题–JVM大厂篇之CMS GC的前世今生:为什么它曾是Java的王者,又为何将被G1取代
- Java就业-学习路线–突破性能瓶颈: Java 22 的性能提升之旅
- Java就业-学习路线–透视Java发展:从 Java 19 至 Java 22 的飞跃
- Java就业-学习路线–Java技术:2024年开发者必须了解的10个要点
- Java就业-学习路线–Java技术栈前瞻:未来技术趋势与创新
- Java就业-学习路线–Java技术栈模块化的七大优势,你了解多少?
- Spring框架-Java学习路线课程第一课:Spring核心
- Spring框架-Java学习路线课程:Spring的扩展配置
- Springboot框架-Java学习路线课程:Springboot框架的搭建之maven的配置
- Java进阶-Java学习路线课程第一课:Java集合框架-ArrayList和LinkedList的使用
- Java进阶-Java学习路线课程第二课:Java集合框架-HashSet的使用及去重原理
- JavaWEB-Java学习路线课程:使用MyEclipse工具新建第一个JavaWeb项目(一)
- JavaWEB-Java学习路线课程:使用MyEclipse工具新建项目时配置Tomcat服务器的方式(二)
- Java学习:在给学生演示用Myeclipse10.7.1工具生成War时,意外报错:SECURITY: INTEGRITY CHECK ERROR
- 使用Jquery发送Ajax请求的几种异步刷新方式
- Idea Springboot启动时内嵌tomcat报错- An incompatible version [1.1.33] of the APR based Apache Tomcat Native
- Java入门-Java学习路线课程第一课:初识JAVA
- Java入门-Java学习路线课程第二课:变量与数据类型
- Java入门-Java学习路线课程第三课:选择结构
- Java入门-Java学习路线课程第四课:循环结构
- Java入门-Java学习路线课程第五课:一维数组
- Java入门-Java学习路线课程第六课:二维数组
- Java入门-Java学习路线课程第七课:类和对象
- Java入门-Java学习路线课程第八课:方法和方法重载
- Java入门-Java学习路线扩展课程:equals的使用
- Java入门-Java学习路线课程面试篇:取商 / 和取余(模) % 符号的使用
加入知识星球[青云交技术栈 AI 特训营],一起实现技术飞跃
关注微信号【QingYunJiao】,备注“CSDNMST”获取JVM面试相关资料
关注公众号【青云交】,回复 “JVMZGC”,即可获取 JVM 最新资讯。让我们一起交流探讨,共同进步!