简单了解JVM 组成以及各部分

2023-10-29

简单介绍JVM各组成部分

在这里插入图片描述图1 JVM组成部分
JVM包含两个子系统两个组件
两个子系统:类加载子系统(Class loader)和执行引擎(Execution engine)
两个组件:运行时数据区(Runtime data area)、本地接口(Native Interface)

类加载子系统(Class loader)

根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。
注: Class Loader 只管加载符合文件结构的class文件,至于说能不能运行,则不是它负责的,那是由Execution Engine 负责的。

执行引擎(Execution engine)

执行引擎也叫作解析器(Interpreter),负责解析命令,提交操作系统执行。执行classes中的指令。

运行时数据区(Runtime data area)

运行数据区是整个JVM的重点,java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域:Method Area(方法区)VM stack(虚拟机栈)Native Method Stack(本地方法栈)、Heap(堆)Program Counter Register(程序计数器)

方法区(Method Area)

在这里插入图片描述
图2
主要存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据(比如spring 使用IOC或者AOP创建bean时,或者使用cglib,反射的形式动态生成class信息等)。
注: JDK 6 时,String等字符串常量的信息是置于方法区中的,但是到了JDK 7 时,已经移动到了Java堆。所以,方法区也好,Java堆也罢,到底详细的保存了什么,其实没有具体定论,要结合不同的JVM版本来分析。

异常:
当方法区无法满足内存分配需求时,将抛出OutOfMemoryError。
运行时常量池溢出:比如一直往常量池加入数据,就会引起OutOfMemoryError异常。

虚拟机栈(VM stack)

本地方法栈(Native Method Stack)

堆(Heap)

程序计数器(Program Counter Register)

本地接口(Native Interface)

本地接口的作用是融合不同的编程语言为Java 所用,初衷是融合C/C++ 程序。Java 诞生的时候是C/C++ 横行的时候,要想立足,必须有一个聪明的、睿智的调用C/C++ 程序,于是就在内存中专门开辟了一块区域处理标记为native 的代码。具体做法是Native Method Stack 中登记native 方法,在Execution Engine 执行时加载native libraies(本地方法库) 。
目前该方法使用的是越来越少了,除非是与硬件有关的应用,比如通过Java 程序驱动打印机,或者Java 系统管理生产设备,在企业级应用中已经比较少见,因为现在的异构领域间的通信很发达,比如可以使用Socket 通信,也可以使用Web Service 等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单了解JVM 组成以及各部分 的相关文章

随机推荐

  • 基于MATLAB的指纹识别算法仿真实现

    FPGA教程目录 MATLAB教程目录 目录 一 理论基础 二 核心程序 三 测试结果 一 理论基础 在指纹图像预处理部分 论文对预处理的各个步骤包括规格化 图像分割 中值滤波 二值化 细化等以及各个步骤的方法进行了深入的分析和研究 选择了
  • MySQL数据库实现本地数据库和远程服务器数据库数据同步

    项目中有两个数据库 本地数据库和远程服务器数据库 数据要在本地经过数据洗涤后才传上服务器数据库 之前用的Navicat工具 但是速度慢 且无法设置定时同步 后来改用Datax 它的效率真的非常高 DataX 是阿里巴巴集团内被广泛使用的离线
  • 大语言模型未来会是数据工程吗

    作者 养生的控制人 整理 NewBeeNLP https zhuanlan zhihu com p 654959483 大家好 这里是 NewBeeNLP 分享符尧博士关于大语言模型的数据工程方面的一些见解 原文链接 1 take home
  • Docker基础篇6:Dockerfile指令(1)

    1 Dockerfile指令 1 FROM指令 构建的新镜像是基于那个镜像 例如 FROM centos 7 2 MAINTAINER指令 镜像维护者姓名或者邮件地址 3 RUN指令 构建镜像时运行的shell命令 写法一 RUN yum
  • vue 获取 指定元素的高度宽度等(使用vue中的 ref 获取到的是 dom 元素高度或者宽度)

    使用 vue 的时候 想要获得一个指定的元素的高度时 可以使用 vue 中的 ref 当 ref 加在普通的元素上 使用 this ref name 获取到的是 dom 元素 示例 写在 页面 html 部分的 div div 写在 页面
  • 从零开始搭二维激光SLAM --- Hector论文公式推导与相关代码解析

    这篇文章将带领大家推导一下hector slam论文中的公式 之后再对这部分公式对应的代码进行讲解下 markdown打公式太费劲了 所以我用手写了 懒 然后csdn又限制了图片文件大小 我是照完照片又截图才传上来的 所以图片有点不清晰 1
  • 实现最小栈

    题目要求 实现一个栈 要求实现Push 出栈 Pop 入栈 Min 返回最小值的操作 的时间复杂度为O 1 首先针对这道题有多重解决方案 1 定义两个栈 一个正常栈 另一个栈的栈顶始终保存整个栈内的最小值 思路如下 无论Push什么数据 正
  • BGI::detail::content用法详解及示例代码

    BGI detail content用法详解及示例代码 在C C 编程中 BGI Borland Graphics Interface 是一个用于图形绘制的库 它提供了一系列函数和工具 使开发者能够在DOS和Windows环境下创建图形界面
  • NumPy——输出向量和矩阵

    微信公众号 龙跃十二 我是小玉 一个平平无奇的小天才 我们都知道 NumPy是python学习和机器学习中非常重要的库 我们在学习过程中不可避免的使用到这个库 NumPy是Python中科学计算的基础包 它提供多维数组对象 各种派生对象 如
  • 一文搞懂Python的文件路径操作

    如果你要在代码里读取一个文件 那么你首先要知道这个文件的路径 如果只有一个文件 那么很简单 直接复制这个文件所在的文件夹路径及其文件名即可 而在很多情况下 我们会处理大量的文件 这些文件一般都会按一定的规则存放在一个或几个文件夹里 本文便是
  • cesium timeline时间改为系统时间(北京时间) vue版本

    效果图 初始化三维球后 追加如下代码 修改timeline时间 从珠联时间改为北京时间 initGlobel 省略初始化 this viewer animation viewModel dateFormatter this DateTime
  • linux卸载openjdk并安装jdk

    1 java version 查看是否安装 2 查看有哪些java安装文件 3 开始卸载 卸载掉下面两个 java version查看找不到java版本 就说明卸载成功了 如果卸掉下面两个还能看到java版本的话 就可以把第一个和第二个一起
  • python中字符串大小写判断和转换函数(upper,lower,capitalize,istitle)

    S为一字符串 可以使用python的内建函数对S中的字母大小写做判断和改变 supper lower和capitalize是转换函数 可以把字符串中的字母做相应的处理 istitle isupper和islower是判断函数 它们对字符串做
  • opencv+mfc搭建框架

    环境 vs2012 opencv2 49 功能 加载图片 保存 二值化 放大 缩小 旋转 实现方法 用opencv来实现相应的图像处理功能 用mfc的对话框来搭建框架 难点 在Mfc框架下显示图片 解决办法 根据父窗口与子窗口的关系 将op
  • VuforiaAR扫描3d物体

    Unity版本为2020 3 20 Vuforia版本为9 6 3 有偿demo 链接 https pan baidu com s 1YlmKeMWvMFRYPhieP3OrqQ 3D物体数据扫描 安卓机扫描3D物体的Scanner工具包下
  • C#的线性规划代码

    using System using System Collections Generic using System Linq using System Text using System Threading Tasks namespace
  • C语言实现RAND函数的方法

    C语言使用rand 一个值就可以实现生成一个伪随机数供我们使用 那么rand函数是如何实现的呢 我们自己可不可以编辑出来 其实是可以的 rand作为伪随机数发生器产生的是一个伪随机数 一般的用途能够满足 要想实现这个函数 需要用一个公式 x
  • Springboot使用Thymeleaf模板引擎无法加载css样式等静态资源

    我的项目文件目录如下 在使用thymeleaf模板引擎时访问不到css样式文件如下 其原因是Thymeleaf模板引擎引用文件需要按照规定的写法 如下 需使用th href属性 路径需使用 文件路径 包裹 加上后就可以看见样式了
  • 报表的发布

    各种不同的报表工具 其发布方式是不一样的 现在说说一些报表工具的发布方式 笔者对报表了解不多 可能有些认识上的错误 望大家指明 DevExpress公司出品的报表工具 XtraReport 它的报表设计器就是集成在VS NET集成开发环境中
  • 简单了解JVM 组成以及各部分

    简单介绍JVM各组成部分 图1 JVM组成部分 JVM包含两个子系统和两个组件 两个子系统 类加载子系统 Class loader 和执行引擎 Execution engine 两个组件 运行时数据区 Runtime data area 本