前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题16:介绍一下JVM的基本结构?

面试题16:介绍一下JVM的基本结构?

作者头像
爪哇缪斯
发布2023-05-09 21:36:03
1160
发布2023-05-09 21:36:03
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

JVM基本结构图如下所示:

如下是针对每个部分的介绍:

  • 类加载子系统

负责从文件系统或者网络中加载Class信息

  • 方法区

加载的类信息存放于一块称为方法区的内存空间。

除了类的信息外,方法区中可能还会存放运行时常量池信息,包括:字符串字面量数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。

方法区是所有线程共享的。

  • Java堆

Java堆是在虚拟机启动的时候建立的,它是Java程序最主要的内存工作区域。几乎所有的Java对象实例都存放于Java堆中

堆空间是所有线程共享的。

  • 直接内存

Java的NIO库允许Java程序使用直接内存,在NIO被广泛使用后,直接内存的使用也变得非常普通。

直接内存是Java堆外的、直接向系统申请的内存区间。访问速度会优于Java堆。它大空间大小只会受操作系统给出的最大内存影响。

与Java堆相比,虽然在访问读写上直接内存有较大的优势,但是在内存空间申请时,堆空间的速度远远高于直接内存。

结论:直接内存适合内存空间申请次数较少、访问较频繁的场合

  • Java栈

它是线程私有的,它在线程创建的时候被创建。

Java栈中保存着栈帧信息局部变量方法参数、同时和Java方法的调用返回密切相关。

  • 本地方法栈

它与Java栈非常类似,最大的不同在于Java栈用于Java方法的调用,而本地方法栈则用于Native方法调用

  • PC(Program Counter)寄存器

它是每个线程私有的空间。

如果正在执行的方法不是本地方法,PC寄存器就会指向当前正在被执行的指令

如果当前方法是本地方法,那么PC寄存器的值就是undefined

  • 垃圾回收系统

GC可以对方法区Java堆直接内存进行回收。

Java堆是GC的工作重点,和C、C++不同,Java中所有的对象空间释放都是隐式的

  • 执行引擎

是Java虚拟机的最核心组件之一,它负责执行虚拟机的字节码

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档