首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JVM笔记--如果你写JVM,最需要考虑的重要结构是什么?

JVM笔记--如果你写JVM,最需要考虑的重要结构是什么?

作者头像
秦怀杂货店
发布于 2022-02-15 06:59:48
发布于 2022-02-15 06:59:48
1870
举报
文章被收录于专栏:技术杂货店技术杂货店

Github仓库地址:https://github.com/Damaer/JvmNote 文档地址:https://damaer.github.io/JvmNote/ 如果有图片,图片都是draw.io绘制,在/drawio文件夹下。

开局一张图,前面已经从每一部分解析过JVM的内存结构【JVM笔记【1】-- 运行时数据区】了,现在按照顺序来分析:

整体上来看:类文件从类加载子系统,加载完成之后,主要存放在方法区(JRockit和H9没有方法区,这里指的是HotSpot)。运行时的数据主要是存放在运行时数据区,代码的解释编译优化以及垃圾收集,都是在执行引擎中。本地方法是指Native方法,也就是C/C++编写的方法。

类加载子系统

类文件首先需要经过类加载子系统,进行加载,进类信息等加载到运行时数据区。

在类加载子系统中有以下三个阶段操作:

  • 加载
  • 链接
  • 初始化

其中加载的时候,有三种类加载器:

  • Bootstrap ClassLoader:引导类加载器,主要加载JDK里面的核心类
  • Extension ClassLoader:拓展类加载器
  • Application ClassLoader:应用加载器

而链接也分为3个阶段,主要是:

  • 验证
  • 链接
  • 解析

运行时数据区

经过类加载子系统加载之后,进入运行时数据区,运行时区域主要分为:

  • 线程私有:
    • 程序计数器:Program Count Register,线程私有,没有垃圾回收
    • 虚拟机栈:VM Stack,线程私有,没有垃圾回收
    • 本地方法栈:Native Method Stack,线程私有,没有垃圾回收
  • 线程共享:
    • 方法区:Method Area,以HotSpot为例,JDK1.8后元空间取代方法区,有垃圾回收。
    • 堆:Heap,垃圾回收最重要的地方。

虚拟机栈,每一个线程有一份,每一个线程的虚拟机栈里面,存放的是一个个栈帧,每一个栈帧表示一个方法调用。

PC寄存器,同样是每一个线程有一份,不同线程之间执行到何处,互不干扰。

执行引擎

执行引擎里面可以逐行解释执行,也可以编译成机器指令直接执行,主要包括:

  • 解释器
  • 即时编译器:即时编译器中包括了中间代码生成器,代码优化器,目标代码生成器等。
  • 垃圾收集器

解释器,需要逐行解释执行,效率低下。譬如:如果循环两千次,循环体很大,每次执行都需要解释执行。

JIT 编译器,除了可以直接全部即时编译,还可以统计出那些代码执行频率比较高,这部分代码就是热点代码,这种技术叫做热点代码探测技术JIT 编译器会将热点代码,提前编译成为机器指令,放在方法区缓存起来,下次执行到的时候,不需要解释执行,而是直接运行机器指令。

即时编译器的执行效率很高,为什么不将它全部提前编译好缓存起来呢?

  • 全部提前编译,首次启动响应速度慢,会有卡顿的感觉,因为编译需要大量时间。(主要原因)
  • 缓存代码,需要放在方法区,占用内存空间,容易溢出。
  • 翻译成为机器指令,则这部分缓存的 CodeCache 是不能够直接跨平台,因为不同环境的机器指令是不大一样的,只能每次运行前就全部编译。

如果需要写一个虚拟机,那么需要考虑的重要两部分是:类加载子系统执行引擎

类加载子系统负责将类信息按照规定,加载到运行时数据区,而执行引擎主要负责对代码解释执行或者编译成二进制缓存起来,进行执行。

PS:本笔记是在宋红康老师的JVM视频中学习的笔记,均经过实践,加上自己的理解。地址:https://www.bilibili.com/video/BV1PJ411n7xZ ,强烈推荐!!!

【作者简介】: 秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。 - END -

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

本文分享自 秦怀杂货店 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JVM之JVM初探
JVM的类加载器为ClassLoader采用双亲委派模型机制进行加载类。 双亲委派模型机制: 根据父子关系一直往顶层找是否被其他父级parent类加载器加载过,如果找到加载过,返回;如果没有找到,在返回一个一个查找是否有加载的权限,如果有就加载;如果这个时候所有的父级parent类加载器都没有加载过而且没有权限加载,那么自己去加载。
北洋
2021/12/14
5650
JVM之JVM初探
【JVM】001-JVM的运行机制
1、JVM(Java Virtual Machine)是用于运行 Java 字节码的虚拟机。
訾博ZiBo
2025/01/06
990
【JVM】001-JVM的运行机制
JVM是如何执行Java程序的(串联JVM面试题)
如果你对JVM一知半解,如果你想了解JVM的工作流程,如果你知道一些JVM面试题却无法将知识点串联起来,那么这篇文章非常适合你。
王二蛋
2024/09/19
2140
【详解】JVM整体架构与调优技巧
Java虚拟机(JVM)是运行Java程序的核心组件,它负责将字节码转换成机器码并执行。了解JVM的内部结构和工作原理对于提高应用程序性能至关重要。本文将深入探讨JVM的整体架构,并分享一些实用的调优技巧。
大盘鸡拌面
2025/07/16
1470
Java底层-HotSpot
在前面几节我们聊到,Javac编译器将java文件编译为class文件后,由JVM将字节码转为与机器适配的机器码进行执行, 这里我们说的JVM实际上是JVM实例(JVM通常有三种含义,一种是抽象规范概念、一个具体的是实现,比如HotSpot、 一种是运行中的虚拟机实例)。
每天学Java
2020/06/28
6240
JVM笔记 -- JVM的发展以及基于栈的指令集架构
虚拟机,就是虚拟的计算机,可以执行一系列虚拟计算机指令,大体上可以分为系统虚拟机和程序虚拟机。它们运行时,都会受到虚拟机提供的资源的限制。
秦怀杂货店
2021/03/07
6040
JVm JDK JRe 三者区别与联系详解
我将从概念、功能、联系与区别等方面入手,为你详细阐述JVM、JDK和JRE,并结合应用实例辅助理解。
用户4124626
2025/06/12
1380
JVm JDK JRe 三者区别与联系详解
JVM常见面试题(一):JVM是什么、JVM由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM(Java Virtual Machine,即java虚拟机),java程序的运行环境(java二进制字节码的运行环境)。
寻求出路的程序媛
2024/07/29
2160
JVM常见面试题(一):JVM是什么、JVM由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM体系结构认知
虚拟机 何为虚拟机呢?虚拟机是模拟执行某种指令集体系结构(ISA)的软件,是对操作系统和硬件的一种抽象。其软件模型如下图所示: 计算机系统的这种抽象类似于面向对象编程(OOP)中的针对接口编程泛型(
xiangzhihong
2018/01/26
8700
JVM快速扫盲篇
HotSpot是Java体系下使用最多的虚拟机,它结合了最新的内存模型,垃圾收集器和自适应优化器,为使用许多先进技术的Java应用程序提供了最佳性能。
程序员波特
2024/01/19
1530
JVM快速扫盲篇
JVM架构体系与GC命令小总结
Java虚拟机Java virtual machine(JVM) 是物理机器的软件实现。java编译器javac将源码文件.java编译成字节码文件.class,然后这个字节码文件.class被放到JVM中,装载并执行字节码文件.class。JVM架构图如下。
王知无-import_bigdata
2020/06/11
5660
Java虚拟机(JVM)的内部架构及其工作原理,JVM的垃圾收集机制及其原理
Java虚拟机(Java Virtual Machine,JVM)是Java运行环境的一部分,负责解释和执行Java字节码。JVM的架构可以分为三个主要的组件:类加载器(ClassLoader),运行时数据区(Runtime Data Areas)和执行引擎(Execution Engine)。
一凡sir
2023/08/14
3430
Java虚拟机(JVM)的内部架构及其工作原理,JVM的垃圾收集机制及其原理
JVM原理最全、清晰、通俗讲解,五天40小时吐血整理
另外,小编也有根据以下总结内容,录制了对JVM讲解视频。里面有个用visio画的JVM内部结构图,每部分的作用都有详细讲解,希望能有帮助。网址:https://edu.csdn.net/lecturer/board/10494
全栈程序员站长
2022/08/09
1.3K0
JVM原理最全、清晰、通俗讲解,五天40小时吐血整理
深入理解Java内存区域(最新版面试题)
如果觉得内容不错的话,希望大家可以帮忙点赞转发一波,这是对我最大的鼓励,感谢🙏🏻
小熊学Java
2023/07/16
3400
深入理解Java内存区域(最新版面试题)
一文了解JVM
JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
宜信技术学院
2019/06/28
5010
一文了解JVM
【面试题精讲】Java虚拟机的组成
Java虚拟机(JVM)是Java程序运行的核心组件,它负责将Java字节码转换为机器码并执行。下面是Java虚拟机的主要组成部分:
程序员朱永胜
2023/10/22
2010
【面试题精讲】Java虚拟机的组成
JVM(完结)
程序在执行前要先把java 文件转换成(Class文件),JVM首先要需要把字节码通过一定的方式类加载器(ClassLoader)把文件加载到内存中 运行时数据区,而字节码文件JVM的一套指令集规范并不能直接交给底层操作系统去执行,因此需要特定的命令解析器 执行引擎 将字节码翻译成底层操作系统指令再交由 CPU 去执行 ,而这个过程中需要调用其他语言本地库接口(Native Interface) 来实现整个程序的功能
Java架构师必看
2021/05/14
5050
JVM(完结)
JVM体系结构详解
虚拟机是物理机的软件实现。Java是用WORA(编写一次运行到任何地方)的概念开发的,它在VM上运行。编译器将Java文件编译成Java .class文件,然后将.class文件输入JVM, JVM加载并执行类文件。下面是JVM的架构图。
挨踢小子部落阁
2019/09/25
5790
JVM体系结构详解
jvm面试题汇总
小尘要自信
2023/10/10
2580
Java虚拟机:Jvm概念和原理详解以及GC机制的分析
1. Java 堆(Java Heap): (1)是Java虚拟机所管理的内存中最大的一块。 (2)在虚拟机启动的时候创建。堆是jvm所有线程共享的。 (3)唯一目的就是存放对象实例,几乎所有的对象实例以及数组都要在这里分配内存。
Java_老男孩
2020/02/18
7040
Java虚拟机:Jvm概念和原理详解以及GC机制的分析
相关推荐
JVM之JVM初探
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档