当前位置: 首页 > news >正文

日拱一卒 | JVM

文章目录

  • 什么是JVM?
  • JVM的组成
  • JVM的大致工作流程
  • JVM的内存模型

什么是JVM?

我们知道Java面试,只要你的简历上写了了解JVM,那么你就必然会被问到以下问题:

  • 什么是JVM?
  • 简单说一下JVM的内存模型?
  • 类的加载的过程是怎样的?
  • 什么叫内存溢出、堆栈溢出、逃逸分析?

大家可能大概知道JVM是个什么东西,但很难把他完全说清楚
这些零散的问题,如果没有一个结构来容纳,将会很难记忆,也很难联系起来

我们今天就系统的聊一下JVM,以及经常问到的关于JVM的面试题

JVM的组成

先看这张图
在这里插入图片描述
JVM共由四个模块组成,其中包含为两个子系统和两个组件,分别为:

  • class loader 类加载系统
  • execution engine 执行引擎子系统
  • runtime data area 运行时数据区组件
  • native interface 本地借口组件

面试中 最经常问到的就是 1、3两个,类加载器、内存模型。
相信大家都有体会~

那我们先来讲讲JVM工作的完整流程,再来详细讲讲这两个面试中最经常问到的两个组件。

JVM的大致工作流程

首先通过编译器把Java源代码转换成字节码,class loader类装载器再把字节码加载到内存中,将其放在运行时运行数据区的方法区内,而字节码文件仅是JVM的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析,执行引擎execution engine,将字节码翻译成底层的系统指令,再交给CPU去执行,而这个过程中需要调用其他语言的本地库接口,native interface来实现整个程序的功能。

好了,有了这个大概的认识,我们大概能了解每个部分分别的功能和作用。

下面我们来聊聊面试工程中经常问到的关于JVM的问题。

在这里插入图片描述

我们从最常问到的问题开始

JVM的内存模型

首先是内存模型内存模型,一共有五个单元,分别是程序计数器方法区对站和本地方法站这个如果直接来寄可能比较难寄,我们通过实际实验过程中内存创建的规律来记忆会更方便一些,首先一个县城创建,他会带出三个东西,分别叫做程序技术器和加虚拟之战以及本地方法站这三个单元

那另外两个单元方法区和堆就是县城共享的区域

我们分别说一下每一个区域它的功能新程序技术器,它是县城私有的一个县城创建之后,他就会有一个程序技术器,他存在的意义是当我们操作系统中现成数超过CPU的合数的时候,那我们执行如果就存在现场等待的情况,为了记住我们这个县城当前已经执行到哪个步骤了,所以就存在一个东西,要做程序技术器记录县城正在指执行的这个将要执行下一步骤的这个指令的地址

我们分别说一下每一个区域它的功能新程序技术器,它是县城私有的一个县城创建之后,他就会有一个程序技术器,他存在的意义是当我们操作系统中现成数超过CPU的合数的时候,那我们执行如果就存在现场等待的情况,为了记住我们这个县城当前已经执行到哪个步骤了,所以就存在一个东西,要做程序技术器记录县城正在指执行的这个将要执行下一步骤的这个指令的地址第二个东西叫做嘉华逊基站嘉兴站是每个县城都会有一个叫训练机站他从每这个站里会存在若干个战争,每个战争保存一个方法的入餐出餐静态变量,还有这个返回值等地址等等,再就是本地方发展本地方法,但他的作用和教训激战作用是类似的,只不过他提供的他是为这个本地方法native Mike提供这个战争战争的记录
第二个东西叫做嘉华逊基站嘉兴站是每个县城都会有一个叫训练机站他从每这个站里会存在若干个战争,每个战争保存一个方法的入餐出餐静态变量,还有这个返回值等地址等等,再有就是本地方发展本地方法,但他的作用和教训激战作用是类似的,只不过他提供的他是为这个本地方法native Mac提供这个战争战争的记录

OK,下面是性能调优的部分,我们这V M一共有哪些参数以及我们做G的性能分析工具有哪些工具这部分我们先跳过不讲

OK,下面是性能调优的部分,我们这V M一共有哪些参数?以及我们做G的性能分析工具有哪些工具这部分我们先跳过,不讲在下面就是执行模式,一个Clas文件在被执行时会经过哪些过程它的完整的生命周期是哪些?

然后就是类加载的过程,首先我们有一个基础知识叫做双庆委派机制双庆委派机制是什么就是当我们一个例假的气需要加载一个Clas的时候,他会先去找他的负累,询问他的负累,让他的副理信息加载这个类,如果他的父类加载不了,然后他再让他的负累的负累再来尝试加载如果,所有的父类加载不了才会上之类赖加载

所有的父类加载不了,再才会上之内赖加载常见的内下载器,一共有四种第一种是B strap类下载器,他是加载我们家最底层代码这个类,然后是ex深深立下的气,再是什么家的气,最后是自定义的那家的气

关于兵器优化一共有哪些内容?首先公共指表达式的消除以指令重拍内敛,还有我们比较常问道的陶艺分析理论,他分析的方法是什么?现场是怎么做到一分析的,还有我们线上是如何分配空间以及同步消除的。

关于兵器优化一共有哪些内容?首先公共指表达式的消除以指令重排内敛,还有我们比较常问道的陶艺分析理论,他分析的方法是什么?现场是怎么做到一分析的还有我们现站上是如何分配空间以及同步消除的一些问题,最后呢,就是我们的GCGC是一个更长见的问题,JC首先分为了两个问题,一个是分类回收,还有一是回收器的实现风带回收,我们可以分为这个新生代老年代,然后当然在最新的这个哪里会出去几万中出现了这个叫持久代这个概念

,最后呢,就是我们的GCGC是一个更长见的问题,JC首先分为了两个问题,一个是分类回收,还有一是回收器的实现风带回收,我们可以分为这个新生代老年代,然后当然在最新的这个那里会出去几万中出现了这个叫持久代这个概念回收期的实现有哪些?我们有创新的回收期,并且回收期C MSG o还有Z GC等等这些回收器。

相关文章:

日拱一卒 | JVM

文章目录 什么是JVM?JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM? 我们知道Java面试,只要你的简历上写了了解JVM,那么你就必然会被问到以下问题: 什么是JVM?简单说一下JVM的内存模型?…...

乐尚代驾六订单执行一

加载当前订单 需求 无论是司机端,还是乘客端,遇到页面切换,重新登录小程序等,只要回到首页面,查看当前是否有正在执行订单,如果有跳转到当前订单执行页面 之前这个接口已经开发,为了测试&…...

SciPy 与 MATLAB 数组

SciPy 与 MATLAB 数组 SciPy 是一个开源的 Python 库,广泛用于科学和工程计算。它构建在 NumPy 数组的基础之上,提供了许多高级科学计算功能。MATLAB 是一个高性能的数值计算环境,它也使用数组作为其基础数据结构。在这篇文章中,我们将探讨 SciPy 和 MATLAB 在数组操作上的…...

基于vue-grid-layout插件(vue版本)实现增删改查/拖拽自动排序等功能(已验证、可正常运行)

前端时间有个需求,需要对33(不一定,也可能多行)的卡片布局,进行拖拽,拖拽过程中自动排序,以下代码是基于vue2,可直接运行,报错可评论滴我 部分代码优化来自于GPT4o和Clau…...

DBoW3相关优化脉络

1 DBow3 GitHub - rmsalinas/DBow3: Improved version of DBow2 2 优化后得到fbow GitHub - rmsalinas/fbow: FBOW (Fast Bag of Words) is an extremmely optimized version of the DBow2/DBow3 libraries. 其中fbow是ucoslam的一部分; ucoslam GitHub - la…...

qt 如何制作动态库插件

首先 首先第一点要确定我们的接口是固定的,也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…...

一种docker start放回Error response from daemon: task xxx错误的解决方式

1. 问题描述 执行systemctl daemon-reload与systemctl restart docker命令后,发现docker中有的应用无法启动,并显示出Exit(255)的错误提示。 重新执行docker start 容器id后发现返回,Error response from daemon: task xxx的错误。 2. 问题…...

规控面试常见问题

一、项目中遇到的困难或者挑战是什么? 二、A*算法原理(伪代码) 输入:代价地图、start 、 goal(Node结构,包含x、y、g、h、id、pid信息) 首先初始化:创建一个优先级队列openlist,它是一个最小堆,根据节点的f值排序 ( priority_queue<Node, std::vector<Node…...

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…...

【全网最全】CSDN博客的文字颜色、字体和字号设置

文章目录 一、字体颜色二、字体大小三、字体类型四、字体背景色 在这篇博客中&#xff0c;我们将深入探讨如何在Markdown编辑器中设置文字颜色、大小、字体与背景色。Markdown本身并不直接支持这些功能&#xff0c;但通过结合HTML标签和CSS样式&#xff0c;我们可以实现这些视觉…...

C#实现数据采集系统-Mqtt实现采集数据转发

在数据采集系统中,通过ModbusTcp采集到数据之后,再通过MQTT转发到其他应用 MQTT操作 安装MQTT mqtt介绍和环境安装 使用MQTT 在C#/Net中使用Mqtt MQTT类封装 MQTT配置类 public class MqttConfig{public string Ip {get; set;...

common-intellisense:助力TinyVue 组件书写体验更丝滑

本文由体验技术团队Kagol原创~ 前两天&#xff0c;common-intellisense 开源项目的作者 Simon-He95 在 VueConf 2024 群里发了一个重磅消息&#xff1a; common-intellisense 支持 TinyVue 组件库啦&#xff01; common-intellisense 插件能够提供超级强大的智能提示功能&…...

图片在线压缩有效方法详解,分享7款最佳图片压缩工具免费(全新)

当您的系统中图片数量不断增加&#xff0c;却无法删除时&#xff0c;那么就需要通过图片压缩来解决您的问题。随着图片文件的增大&#xff0c;高分辨率图片占据了大量存储空间。而此时系统中的存储空间也开始变得不够用&#xff0c;无法跟上高质量图片的增长。因此&#xff0c;…...

electron安装及快速创建

electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网&#xff1a;https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹&#xff0c;并执行npm 初始化命…...

需要消化的知识点

需要消化 消灭清单 如何自定义一个Interceptor拦截器&#xff1f; 后端开发可以用上的前端技巧 10个堪称神器的 Java 学习网站. 【前端胖头鱼】11 chrome高级调试技巧&#xff0c;学会效率直接提升666% 【前端胖头鱼】10个我经常逛的“小网站” 【前端劝退师lv-6】Chrome D…...

2024年7月25日(Git gitlab以及分支管理 )

分布式版本控制系统 一、Git概述 Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由Linus Torvalds创建的,最 初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开 发人员之间进行协作。 Github 用的就是Git系统来管理它们的…...

pdf格式过大怎么样变小 pdf文件过大如何缩小上传 超实用的简单方法

面对体积庞大的 PDF 文件&#xff0c;我们常常需要寻找有效的方法来缩减其大小。这不仅能够优化存储空间&#xff0c;还能提升文件的传输和打开速度。PDF文件以其稳定性和跨平台兼容性成为工作和学习中的重要文件格式。然而&#xff0c;当我们需要通过邮件发送或上传大文件时&a…...

前端文件下载word乱码问题

记录一次word下载乱码问题&#xff1a; 用的请求是axios库&#xff0c;然后用Blob去接收二进制文件 思路&#xff1a;现在的解决办法有以下几种&#xff0c;看看是对应哪种&#xff0c;可以尝试解决 1.将响应类型设为blob&#xff0c;这也是最重要的&#xff0c;如果没有解决…...

repo中的default.xml文件project name为什么一样?

文章目录 default.xml文件介绍为什么 name 是一样的&#xff0c;path 不一样&#xff1f;总结 default.xml文件介绍 在 repo 工具的 default.xml 文件中&#xff0c;定义了多个 project 元素&#xff0c;每个元素都代表一个 Git 仓库。 XML 定义了多个不同的 project 元素&…...

<section id=“nice“ data-tool=“mdnice编辑器“ data-webs

大模型日报 2024-07-24 大模型资讯 Meta发布最大Llama 3 AI模型&#xff0c;语言和数学能力提升 摘要: Meta公司发布了其迄今为止最大的Llama 3人工智能模型。该模型主要免费提供&#xff0c;具备多语言处理能力&#xff0c;并在语言和数学方面表现出显著提升。 Meta发布最强AI…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...