• Java高频面试题:一文掌握JVM虚拟机体系结构的深层内涵!


    . 前言

    最近有很多小伙伴都在找工作,他们在面试时经常会被面试官问到一个问题:请说出JVM虚拟机的体系结构?

    很多小伙伴都能说出堆、栈等相关内容,但面试官紧接着又问,你还知道其他内容吗?不少小伙伴就语塞了.......

    这些小伙伴面试完就跑来问健哥这个问题到底该怎么回答才能拿高分,所以今天健哥就在这里给大家讲讲JVM虚拟机体系结构的深层内涵,让你下次面试时可以直接反虐面试官。

    . 题考点

    在梳理今天的面试要点之前,健哥先给大家分析一下面试官的心理。如果面试官是健哥的话,那么我想考查的其实就是候选人是否对JVM虚拟机有一个宏观的理解。

    其实大家可以来想一下,面试官为什么要问这个问题呢?这主要是因为我们进行JVM优化的第一步,就是要先理解整个JVM虚拟机的体系结构和作用,然后再学习JVM的垃圾回收机制、JVM分析的命令等内容,最后才会进行JVM的调优或者优化。只有对JVM虚拟机有整体的理解和把握,我们才能对JVM进行更深入的使用和优化。

    下面是健哥给大家整理的关于JVM虚拟机的整体学习思路和内容:

    有了对JVM的整体了解,接下来我们就可以进一步对这道面试题进行分析了。

    . 解题分析

    下面健哥大家整理的解题思路,单看这张图就很用心吧,拿去不谢哦。

    这里JVM虚拟机的结构一共可以分为九个部分,如下图所示:

    接下来健哥再简单说一下每个部分的核心作用。

    3.1类加载器

    类加载器(class loader)用来Java类加载到Java虚拟机

    Java源程序(.java 文件)在经过 Java编译器编译之后,生成了对应的Java 字节代码(.class 文件),然后类加载器就负责读取这些Java的字节代码,并将其转换成java.lang.Class类的一个实例。每个这样的实例都用来表示一个Java 类,JVM可以通过此实例的 newInstance()方法创建出该类的一个对象。

    3.2方法区

    Java的方法区和堆类似,方法区是一块所有线程都可以共享的内存区域,它保存着系统的类信息,比如类的字段、方法、常量池等。

    3.3Java堆

    堆内存用于存放由new操作创建出来的对象和数组,例如new String()创建一个对象,而这个对象就会放入到Java堆中进行存储。

    3.4Java栈

    栈是线程私有的,它的生命周期与线程相同,用于存储局部变量、动态链接、方法出口等信息。

    3.5直接内存

    直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。主要是用于提高一些场景中的性能,比如在NIO中增加NIO的性能。

    3.6. 本地方法栈

    本地方法栈用于本地方法的调用。我们知道,在JDK源码中很多地方使用了Native关键字,这就是在调用底层C语言编写的本地方法。

    3.7. 垃圾回收系统

    垃圾回收器也叫做垃圾回收系统,主要用于在JVM运行时回收垃圾(不再引用的对象),释放被占用的内存。

    3.8. PC寄存器

    在每个线程启动时JVM都会创建一个PC寄存器,用于保存下一条将要执行的指令地址。PC寄存器的内容总是指向下一条即将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

    3.9. 执行引擎

    执行引擎主要是用于执行编译后的字节码指令。

    四. 小结

    经过上面的一系列分析,最后健哥来给大家总结下这个问题的完整答案:

    JVM虚拟机体系结构一共分为九个部分类加载器方法区Java堆Java栈直接内存本地方法栈垃圾回收器、PC寄存器执行引擎等。

    大家一定要牢记,这可是一道高频的面试题哦!!!

    *威哥Java学习交流Q群:691533824
    加群备注:CSDN推荐
     

  • 相关阅读:
    MySQL进阶
    dBm和asu关系
    跟我学时序分析之基础时序参数
    游戏AI——GOAP技术要点
    竞赛选题 基于深度学习的目标检测算法
    SQL中先排序再筛选与先筛选再排序
    web前端面试-- http的各个版本的区别(HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0)
    HAProxy(一)
    bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory的解决方法
    DJYOS推荐:DJYOS给嵌入式软件开发带来的跨越
  • 原文地址:https://blog.csdn.net/finally_vince/article/details/126290131