大厂面试题-什么是JVM

JVM是Java虚拟机,在聊什么是JVM之前,我们不妨看⼀下这张图。

从这张图中可以看出JVM所处的位置,同时也能看出它两个作用:

    1、运⾏并管理Java源码⽂件所⽣成的Class⽂件,

    2、在不同的操作系统上安装不同的JVM,从⽽实现了跨平台的保证。

⼀般情况下,对于发者⽽⾔,即使不熟悉JVM的运⾏机制并不影响业务代码的开发,因为在安装完JDK或者JRE之后,其中就已经内置了JVM,所以只需要将Class⽂件给JVM运⾏即可。

但当程序运⾏的过程中出现了问题,⽽这个问题发生在JVM层⾯的,那我们就需要熟悉JVM的运⾏机制,才能迅速排查并解决JVM的性能问题。

我们先看下目前主流的JVM HotSpot的架构图,通过这张架构图,我们可以看出JVM的大致流程是把一个class文件通过类加载器加载进系统,然后放到不同的区域,通过编译器编译。

一个部分Class Files

Java中,Class⽂件是由码⽂件⽣成的,⾄于源码⽂件的内容,是每个Java开发者在JavaSE阶段必备知识,这⾥就不再赘述了,我们可以关注⼀下Class⽂件的格式,⽐如其中的常量池、成员变量、⽅法等,这样就能知道Java源码内容在Class⽂中的表示⽅式

二个部分Class Loader Subsystem即类加载机制

Class⽂件加载到内存中,需要借助Java中的类加载机制。类加载机制分为装载、链接和初始化,其主要就是对类进⾏查找、验证以及分配相关的内存空间和赋

三个部分Runtime Data Areas也就是通常所说的运⾏时数据区

其解决的问题就是Class⽂件进入内存之后,该如何进⾏存储不同的数据以及数据该如何进⾏扭转。比如:Method   Area通常会储存由Class⽂件常量池所对应的运⾏时常量池、字段和⽅法的数据信息、类的模板信息等;Heap是存储各种Java中的对象实例;Java Threads通过线程以栈的⽅式运⾏加载各个⽅法;Native Internal Thread可以理解为是加载运⾏native类型的⽅法;PC   Register则是保存每个线程执⾏⽅法实时地址。

这样通过运⾏时数据区的5个部分就能很好地把数据存储和运⾏起来了

第四个Garbage Collector也就是通常所说的垃圾回收

就是对运⾏时数据区中的数据进⾏管理和回收。回收机制可以基于不同的垃圾收集器,⽐如SerialParallelCMSG1、ZGC等,可以针对不同的业务场景选择不同的收集器,只需要通过JVM参数设置即可。如果我们打开hotspot源码,可以发现这些收集器其实就是对于不同垃圾收集算法的实现,核⼼的算法有3个:标记-清除、标记-整理、复制

五个部分是JIT CompilerInterpreter

通俗解就是翻译器,Class的字节码指令通过JIT Compiler和Interpreter翻译成对应操作系统的CPU指令,只不过可以选择解释执⾏或者编译执⾏,在HotSpot JVM默认采用的是这两种⽅式的混合。

第六就是JNI的技术

如果我们想要找Java中的某个native法是如何通过C或者C++实现的,那么可以通过Native Method Interface来进⾏查找,也就是所谓的JNI技术。

通过官⽹上给出的HotSpot架构图,我们就能够知道JVM到底是如何运行的了,当然实际操作的过程中我们可以借助⼀些JVM参数:例如:

些常⻅的JDK常⻅命令

再结JDK常⻅⼯具以及第三⽅的⼀些⼯具

我们就可以优雅地分析JVM出现的常⻅问题并对其进⾏调优。

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

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

相关文章

瑞萨RH850-P1X ECM和英飞凌TC3xx SMU对比

1.1 基本结构 P1X ECM(Error Control Module)收集从不同的错误源和监控电路发来的错误信号,并通过error pin(ERROROUTZ)对外输出、产生中断并发出ECM reset信号。 P1x-C系列根据产品型号不同,ECM个数也不相同,如下: 对应寄存器基地…

Typora 最新激活方法

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,其目标是实现易读易写。而Typora则是一个非常不错的Markdown编辑器,它的界面非常的简洁直观,并且功能各…

css画一条虚线,用到background-image:linear-gradient线性渐变的属性

CSS实现虚线的方法_css 虚线_saltlike的博客-CSDN博客 渐变属性(background-image)全解析_background-image linear_大聪明码农徐的博客-CSDN博客 Background:linear-gradient()详解_background: linear-gradient_小白白中之白的博客-CSDN博客 注意: 必须要写高…

Gateway服务网关

本篇资料:https://gitee.com/Allengan/cloud-demo.githttps://gitee.com/Allengan/cloud-demo.git 目录 1.为什么需要网关 2.gateway快速入门 1)创建gateway服务,引入依赖 2)编写启动类 3)编写基础配置和路由规则…

Spring更加简单的读取和存储对象

前言:在上篇文章中,小编写了一个Spring的创建和使用的相关博客:Spring的创建和使用-CSDN博客,但是,操作/思路比较麻烦,那么本文主要带领大家走进:Spring更加简单的读取和存储对象! 本…

1300*C. Social Distance(贪心构造)

Problem - 1367C - Codeforces 解析&#xff1a; 统计出所有连续0序列&#xff0c;并且记录其左右两侧有没有1&#xff0c;然后对于四种情况分别判断即可。 #include<bits/stdc.h> using namespace std; int t,n,k; signed main(){scanf("%d",&t);while(…

笔记软件Notability mac中文版软件功能

Notability mac是一款帮助用户备注文件的得力工具&#xff0c;Notability Mac版可用于注释文稿、草拟想法、录制演讲、记录备注等。它将键入、手写、录音和照片结合在一起&#xff0c;便于您根据需要创建相应的备注。 Mac Notability mac中文版软件功能 将手写&#xff0c;照片…

优先队列PriorityQueue

前言 PriorityQueue这个队列不知道大家使用过吗&#xff0c;反正我用的很少&#xff0c;主要对它不是很了解&#xff0c;今天我带领大家剖析下PriorityQueue这个优先级队列。 PriorityQueue介绍 顾名思义&#xff0c;PriorityQueue是优先队列的意思。优先队列的作用是能保证每…

基于UDP/TCP的网络通信编程实现

小王学习录 今日鸡汤Socket套接字基于UDP来实现一个网络通信程序DatagramSocket类DatagramPacket类基于UDP的服务器端代码基于UDP的客户端代码基于TCP来实现一个网络通信程序ServerSocket类Socket类基于TCP的服务器端代码基于TCP的客户端代码优化之后的服务器端代码补充TCP长短…

钡铼技术 工控机中的X86和ARM处理器:哪个更具可扩展性?

X86和ARM是两种不同的处理器架构&#xff0c;它们在工控机中的应用也有所不同。 X86架构的处理器是英特尔公司和AMD公司生产的&#xff0c;它们主要应用于个人电脑和服务器等领域。X86架构的处理器具有良好的通用性和兼容性&#xff0c;可以运行各种操作系统和应用软件。X86架…

做外贸的你是不是也怕遇到麻烦的客户

最近遇到两个客户&#xff0c;可以说还未开始真正的沟通&#xff0c;就已经心里开始打怵&#xff0c;打怵的原因也无非是各种理由上的不匹配。 当我们觉得一件事情不可能做成的时候&#xff0c;那么不能做成的原因就会不断的涌现出来&#xff0c;进而会让我们自己在谈判的时候…

堆栈与队列算法-以链表来实现堆栈

目录 堆栈与队列算法-以链表来实现堆栈 C代码 堆栈与队列算法-以链表来实现堆栈 虽然以数组结构来制作堆栈的好处是制作与设计的算法都相当简单&#xff0c;但若堆栈本身是变动的话&#xff0c;则数组大小无法事先规划声明。这时往往必须考虑使用最大可能性的数组空间&#…

Django 社区志愿者管理系统

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 社区志愿者服务管理系统&#xff0c;主要的模块包括查看首页、个人中心、通知公告管理、志愿者管理、普通管理员管理、志愿活动管理、活动宣…

钢琴培训答题服务预约小程序的效果怎样

很多家长都会从小培养孩子的兴趣&#xff0c;钢琴便是其中热度较高的一种&#xff0c;而各城市也不乏线下教育培训机构&#xff0c;除了青少年也有成年人参加培训&#xff0c;市场教育高需求下&#xff0c;需要商家不断拓展客户和转化。 那么通过【雨科】平台制作钢琴培训服务…

中国卖家的出路:TikTok电商重塑东南亚市场

2023年10月4日&#xff0c;印尼政府发布了一则重要公告&#xff0c;宣布不再允许社交媒体作为商品销售平台。这一决策直接影响了TikTok在印尼的电商业务&#xff0c;迫使该平台关闭了其印尼市场的电商运营。 对于TikTok电商而言&#xff0c;印尼市场一直占据着重要地位&#x…

最短路径:迪杰斯特拉算法

简介 英文名Dijkstra 作用&#xff1a;找到路中指定起点到指定终点的带权最短路径 核心步骤 1&#xff09;确定起点&#xff0c;终点 2&#xff09;从未走过的点中选取从起点到权值最小点作为中心点 3&#xff09;如果满足 起点到中心点权值 中心点到指定其他点的权值 < 起…

RTMP直播在虚拟数字人场景使用

虚拟数字人&#xff08;Virtual Digital Human&#xff09;&#xff0c;指的是一种基于数字技术创建的虚拟人物&#xff0c;他们有自己的外貌、声音&#xff0c;甚至是性格。虚拟数字人通常是通过计算机图形学、人工智能和其他先进技术来实现的。人们可以与这些虚拟数字人进行交…

Xamarin.Forms更改AndroidManifest.xml导致错误:没有兼容的代码在线程上运行

想在APP中加一个打开摄像头的功能&#xff0c;按照该博主的方法&#xff1a;https://blog.csdn.net/zhenweied09/article/details/82287761 设置好后&#xff0c;再运行就出现上图的错误&#xff0c;于是查找原因&#xff0c;定位到是更改AndroidManifest.xml文件导致的&#…

QMI8658A_QMC5883L(9轴)-EVB 评估板

1. 描述 QMI8658A_QMC5883L(9轴)-EVB 评估板是一款功能强大的9轴IMU传感器&#xff0c;它利用了QMA8658A 内置的3轴加速度计和3轴陀螺仪&#xff0c;同时结合QMC5883L的3轴地磁数据&#xff0c;来测量物体在三维空间中的角速度和加速度&#xff08;严格意义上的IMU只为用户提供…

Flash模拟EEPROM原理浅析

根据ST的手册&#xff0c;我们可以看到&#xff0c;外挂EEPROM和Dflash模拟EEPROM&#xff0c;区别如下&#xff1a; 很明显&#xff0c;模拟EEprom的写入速度要远远快于外挂eeprom(有数据传输机制)&#xff1b; 其次&#xff0c;外挂EEPROM不需要擦除即可实现写入数据&#xf…