深入理解JVM虚拟机第六篇:内存结构与类加载子系统概述

文章目录

一:内存结构概述

1:运行时数据区

2:运行时数据区简图

3:运行时数据区详细图中英文版 

二:类加载器子系统 

1:加载

2:连接

3:初始化


一:内存结构概述

1:运行时数据区

        class文件被称为字节码文件,从字节码文件之后都是由我们的JVM负责的了。

        首先需要就是基于ClassLoader将我们的类加载到JVM当中,对应到我们的内存当中生成大的Class对象,并将静态属性进行一个初始化,当前这个操作主要是在方法区体现他的操作。

        当我们真正字节码指令的时后,执行引擎就开始发挥作用了,一开始是我们的执行引擎。按照字节码指令依次是去做执行。这里边就涉及到虚拟机栈的从局部变量表中去取数据,包括还需要操作操作数栈。如果需要创建对象的话,还需要使用到我们的堆空间,在这个过程中我们的指令依次往下走的话需要用到程序计数器。如果在整个过程中需要调用本地方法的话,还需要使用本地方法栈。

        以上就是运行时数据区的一个概念。

2:运行时数据区简图

        

3:运行时数据区详细图中英文版 

 

        

 

二:类加载器子系统 

        类加载阶段涉及到三个大阶段:

1:加载

        加载阶段需要用到我们的类加载器,这里共涉及到三类加载器:引导类加载器、拓展类加载器、系统类加载器(应用级加载器)。

2:连接

连接阶段又分为:验证、准备、解析阶段。

3:初始化

静态变量的显示初始化。

        接下来,在整个的这个过程中我们就把Java中的类或者接口都加载进入到JVM当中了。这个时候,我们在运行时数据区里边。虚拟机栈、本地方法栈、程序计数器都是每个线程一份。

        栈里边的一个又一个的结构被称之为栈帧。栈帧还有很细节的内部结构。LV代表本地变量表,OS代表操作数栈,DL代表动态链接,RA代表方法返回地址。

        本地方法栈跟虚拟机栈的区别,他是专门调用native的本地方法的。

        堆区是最大的一块空间。GC主要伺候的一个空间。方法区主要是存放类的信息、常量、域信息、方法信息等。方法区只有Hotspot虚拟机才有,其他的虚拟机都没有。

        解释器和JIT及时编译器和我们的垃圾回收期都在我们的执行引擎中。他的作用就是将我们的指令翻译成为机器指令,供CPU去执行。

        如果自己手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器和执行引擎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis缓存设计与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去…

GpsAndMap模块开源,欢迎测评

背景 之前的文章有提到,最近在使用folium的过程中,深感对于一个非专业人员来说,GPS坐标以及其所隐含的GPS坐标系,以及不同GPS坐标系之间的相互转换关系,不是一个十分清晰的概念,往往造成在使用GPS坐标在fo…

前端通过第三插件uuid 生成一个 uuid

有时候 后端会让我们自己生成一个uuid 我们没必要自己去写 直接用第三方插件就好了 先终端执行 npm install uuid这样 我们第三方插件就进来了 然后 引入一定要根据环境来 //TS环境引入 import { v4 as uuidv4 } from uuid; //js环境引入 const { v4: uuidv4 } require(uui…

全球汽车安全气囊芯片总体规模分析

安全气囊系统是一种被动安全性的保护系统,它与座椅安全带配合使用,可以为乘员提供有效的防撞保护。在汽车相撞时,汽车安全气囊可使头部受伤率减少25%,面部受伤率减少80%左右。 汽车安全气囊芯片是整个系统的控制核心,并…

业务中如何拓展微前端架构

站在整体架构的角度,微前端可以分为以下几类拓展迭代方向。 注册更多微应用 随着业务的扩展,我们可以在主应用中注册更多的微应用。每个微应用是一个独立的子系统,只需要在主应用的注册列表中添加新的项,配置微应用的名称、入口、活动规则等信息即可。 集成微应用…

Spring Boot 动态加载jar文件

Spring Boot 动态加载jar文件 接口实现: package org.bc.device;public interface IDeviceHandler {String start();String stop(); }实现类: package org.bc.device; public class MqttDevice implements IDeviceHandler{ Override public String s…

经历网数据库共享

经历网,为留住您的经历而生 点击 经历网 进入网站查看当前数据 经历网网址:https://www.jili20.com/ 以下 数据库 数据 截止至 2023年9月13日 1)百度网盘 提取 链接:https://pan.baidu.com/s/1WwR4cI9lbSAYTuffo8qmVQ 或点击 此…

sqlserver2012 完全卸载

使用工具 我用的是64位的 双击打开 等待处理完成 输入sql 查询,对查询出来的程序选择批处理,进行批处理卸载 等待卸载完成,期间可能 需要多次点击确认

2023 年您需要了解哪些类型的数据泄露?

到目前为止,所有公司都应该意识到网络安全威胁是任何企业面临的主要风险之一。其中,那些直接损害敏感数据的行为可能会造成特别严重的破坏。 目前,数据泄露的典型成本已接近 450 万美元(在过去三年中增加了 15%)&…

ESP32编译出现Cannot establish a connection to the component registry.报错

前言 (1)在对ESP32开发使用的时候,很容易踩坑,但是总是找不到问题所在。很多时候只能去外网查资料,语言不通,而且有墙特别的难受。就算能够找到乐鑫的工作人员询问,也整个过程也感觉有些许麻烦。…

Python Opencv实践 - LBP特征提取

参考资料: python skimage库LBP提取特征local_binary_pattern参数解释_local_binary_pattern函数_friedrichor的博客-CSDN博客 LBP特征笔记_亦枫Leonlew的博客-CSDN博客 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from skimage.feat…

用c语言编写出三底模型

以下是一个用C语言实现三底模型的示例代码。这个程序通过循环遍历输入的股票数据&#xff0c;判断是否出现三底形态&#xff0c;如果是&#xff0c;则输出买入信号&#xff0c;否则输出卖出信号。 c语言 #include <stdio.h> #include <stdlib.h> // 判断是否出现…