java面试 提高性能 面试问jvm性能调优_人工智能


对于工作3年左右的Java程序员来说,在面试大厂的过程中,面试官可能不会太关注你做了多少个项目、你的CRUD水平如何。更多的是关注你对某项技术点的理解深度,所以说,工作3年左右的小伙伴一定要把自己的重心放到技术的深度上来。

今天,我们先一起聊聊关于JVM性能调优的话题,本文的主要结构如下所示。

java面试 提高性能 面试问jvm性能调优_人工智能_02

常见面试题

关于JVM,一道常见的面试题就是:Java中创建的对象是存储在JVM中的哪个区域的?

例如,这里,我们简单的列举一行代码,如下所示。

User user = new User();

关于上面的代码,不少小伙伴都知道,创建出来的User对象是放在JVM中的堆区域的,而User对象的引用是放在栈中的。但如果你只是了解到这种程度,那面试官就会认为你了解的太浅显了,可能就会达不到他们的要求。其实面试官想要了解你是否对JVM有一个更深入的认识。

站在面试官的角度来看这个问题时,回答创建出来的User对象是放在JVM的堆区,也并没有错。但是JVM的堆内存区域又会分为年轻代和老年代,而年轻代又会分为Eden区和Survivor区。JVM堆空间的逻辑结构如下图所示。

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_03

而面试官更想了解的是你能不能说出来创建的对象具体是存放在JVM堆空间的哪个区域。

在JVM内部,会将整个堆空间划分成年轻代和老年代,年轻代默认会占整个堆内存空间的1/3,老年代默认会占整个堆内存空间的2/3。年轻代又会划分为Eden区和两个Survivor区,它们之间的默认比例是Eden:Survivor1:Survivor2 = 8:1:1。

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_04

如果你能回答出 新创建的User对象是存放在JVM堆空间中年轻代的Eden区,那面试官就会对你刮目相看了。

java面试 提高性能 面试问jvm性能调优_人工智能_05

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_06

java面试 提高性能 面试问jvm性能调优_python_07

java面试 提高性能 面试问jvm性能调优_java_08

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_09

java面试 提高性能 面试问jvm性能调优_python_10

java面试 提高性能 面试问jvm性能调优_人工智能_11

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_12

java面试 提高性能 面试问jvm性能调优_人工智能_13

java面试 提高性能 面试问jvm性能调优_人工智能_14

java面试 提高性能 面试问jvm性能调优_python_15

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_16

java面试 提高性能 面试问jvm性能调优_人工智能_17

java面试 提高性能 面试问jvm性能调优_python_18

java面试 提高性能 面试问jvm性能调优_python_19

java面试 提高性能 面试问jvm性能调优_java面试 提高性能_20

java面试 提高性能 面试问jvm性能调优_人工智能_21

java面试 提高性能 面试问jvm性能调优_面试_22

java面试 提高性能 面试问jvm性能调优_人工智能_23

接下来,介绍了类的加载过程,主要包含:加载、验证、准备、解析和初始化等步骤,同时,说明了各个步骤的主要作用。

最后,介绍了JVM中常用的调优参数,涵盖堆、新生代、方法区(元空间)和栈(线程)常用的调优参数。并以Tomcat调优为例,详细说明了如何使用这些调优参数。

说了这么多你都掌握了吗?