【JVM基础篇】JVM入门介绍

news2024/11/17 11:55:49

JVM入门介绍

为什么学习JVM

岗位要求

在这里插入图片描述

在这里插入图片描述

解决工作中遇到的问题

在这里插入图片描述

在这里插入图片描述

性能调优

真实案例

  • 导出超大文件,系统崩溃
  • 从数据库中查询超大量数据出错
  • 消费者消费来不及导致系统崩溃
  • Mq消息队列接受消息导致的内存泄漏
  • 业务高峰期系统失去响应

初识JVM

什么是JVM?

JVM全称是Java Virtual Machine,即Java虚拟机。

JVM本质上是一个程序,它的职责是运行Java字节码文件(.class),将字节码转换为机器码,机器码就可以交给机器运行

在这里插入图片描述

  • 源代码文件是.java,使用javac编译(javac是Java编译器的前端部分,这个过程主要是进行语法检查,不涉及性能优化),变成Java字节码文件.class,之后JVM将.class文件解释为机器码。
  • 通过不同平台上的不同JVM将字节码文件解释成对应平台的机器码,能够让Java源代码“一次编译,到处运行”。

JVM的功能?

  • 解释和运行
    • 对字节码文件中的指令,实时的解释成机器码,让计算机执行
  • 内存管理
    • 自动为对象、方法等分配内存
    • 自动的垃圾回收机制,回收不再使用的对象
  • 即时编译
    • 对热点代码进行优化,提升执行效率
Java为什么比C、C++慢

在这里插入图片描述

  • Java是一门解释型语言(或者说是半编译,半解释型语言)。Java通过编译器javac先将源程序编译成与平台无关的Java字节码文件(.class),再由JVM解释执行字节码文件,从而做到平台无关。 但是,有利必有弊。对字节码的解释执行过程实质为:JVM先将字节码翻译为对应的机器指令,然后执行机器指令。很显然,这样经过解释执行,其执行速度必然不如直接执行二进制字节码文件。
  • 相比于Java,C/C++少了解释的过程,所以效率更高,但是不具有跨平台特性。

在这里插入图片描述

即时编译
作用

JVM的一个重要功能是即时编译(Just in time、JIT),即时编译就是为了优化Java的性能,让其性能接近C、C++,甚至在特定场景实现超越

如何实现

当JVM发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。然后JIT会把部分“热点代码”编译成本地机器相关的机器码,并进行优化,然后再把编译后的机器码缓存入内存,以备下次使用(这样可以省略解释步骤,提高性能)。

在这里插入图片描述

当 JVM 执行代码时,它并不是立即开始编译代码的。如果这段代码本身在将来只会被执行一次,那么从本质上看,编译就是在浪费精力。因为将代码翻译成 java 字节码相对于编译这段代码并执行代码来说,要快很多。反之,如果一段代码频繁的调用方法,或是一个循环,也就是这段代码被多次执行,那么编译就非常值得了。因此,编译器具有的这种权衡能力会首先执行解释后的代码,然后再去分辨哪些方法会被频繁调用来保证其本身的编译。Hot Spot VM 采用了 JIT compile 技术,将运行频率很高的字节码直接编译为机器指令执行以提高性能,所以当字节码被 JIT 编译为机器码的时候,要说它是编译执行的也可以。

总结一下:即时编译是指JVM在解释字节码文件的时候,如果发现了出现频率很高的代码(热点代码),就会直接将这部分代码编译成机器码然后写入内存中以方便之后调用。这就是一个性能上的优化了。

常用JVM有哪些

在这里插入图片描述

  • HotSpot是最广泛的虚拟机(JDK自带),对Java的意义非常重大。但是闭源,无法对源代码进行修改

在这里插入图片描述

在这里插入图片描述

  • GraalVM:性能高、功能强(HotSpot增强版本)
  • 龙井:性能高、修复了很多OpenJDK的bug,更安全

如果想要开发一款虚拟机的话,需要遵从一定的规范

在这里插入图片描述

JVM的组成

在这里插入图片描述

  • 类加载器Classloader:加载class字节码文件的内容到内存中,需要准备一块内存空间来存储类和接口
  • 运行时数据区域(JVM管理的内存):负责管理JVM使用到的内存,如创建对象、销毁对象
  • 执行引擎(即时编译器、解释器、垃圾回收器等):将字节码文件中的指令解释成机器码,同时使用JIT优化性能,如果有的对象不再使用,使用垃圾回收器来回收对象
  • 本地接口(本地已经编译的方法比如虚拟机中提供的c/c++方法)
学习重点

重点学习:类加载器、运行时数据区域、垃圾回收器、即时编译器

了解即可:解释器和本地接口是JVM的底层源码部分,程序员无法进行修改,如果有兴趣再去了解。

文章说明

该文章是本人学习 黑马程序员 的学习笔记,文章中大部分内容来源于 黑马程序员 的视频黑马程序员JVM虚拟机入门到实战全套视频教程,java大厂面试必会的jvm一套搞定(丰富的实战案例及最热面试题),也有部分内容来自于自己的思考,发布文章是想帮助其他学习的人更方便地整理自己的笔记或者直接通过文章学习相关知识,如有侵权请联系删除,最后对 黑马程序员 的优质课程表示感谢。

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

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

相关文章

echarts指标盘属性概括

echarts指标盘属性概括 代码 有模拟数据可以直接使用const options {animation: true,title: {top: "35%",left: "center",// text: "单元测试覆盖度", // 主标题itemGap: 15,textStyle: {// 主标题样式color: "#666666",fontSize:…

云端地球联动大疆机场,支撑矿山高效巡检与智能监测

矿产资源是我国的重要战略性资源。近年来,随着矿山开采深度的逐渐增加,露天矿山边坡滑落等灾害频繁发生,威胁人民群众生命与财产安全。因此,对露天矿边坡进行快速、实时、有效的形变监测和预警已成为当前我国矿山防灾与安全生产的…

Python:如何找到列表中给定元素的索引

在Python编程中,我们经常需要找到列表中某个特定元素的位置,也就是它的索引。索引是元素在列表中的位置,从0开始计数。本文将详细讲解如何使用Python来找到列表中给定元素的索引,并通过示例代码来加深理解。 基本原理 Python提供…

二级等保与三级等保的区别有哪些

二级等保和三级等保的区别主要体现在保护能力、安全要求、监管严格程度等方面。以下是根据提供的搜索结果中关于二级和三级等保的具体差异: 1. 保护能力: 二级等保要求信息系统能够防护来自外部小型组织的威胁,发现重要的安全漏洞和事件&…

章十二、数据库(1) —— 概述、MySQL数据库、SQL、DDL、DML、DQL、多表设计

为什么学习数据库: ● 实现数据持久化到本地; ● 使用完整的管理系统统一管理,可以实现结构化查询,方便管理; 一、 数据库概述 ● 数据库 数据库(DataBase)为了方便数据的 存储 和 管理 &…

某塑料科技公司网络与机房监控运维项目

某塑料科技公司是由日本知名株式会社在中国投资的,以从事橡胶和塑料制品业为主的生产制造企业。随着企业信息化建设提速,信息化运用程度不断提高,对网络基础设施的管理也提出了更高要求,因此公司急需上线一款综合运维平台加强对整…

PyQt5 的对话框

文章目录 1. 简介2. 输入对话框3. 文件对话框4. 颜色对话框5. 字体对话框6. 进度对话框 1. 简介 PyQt5中的对话框是一种常见的用户界面组件,用于与用户进行交互并获取用户输入或确认。常见的对话框包括消息框、输入框、文件对话框、颜色对话框等。PyQt5提供了丰富的…

VBA在Excel中登录页面的应用—动态密码设置

https://mp.weixin.qq.com/s?__biz=MzkwMzY1OTIzOA==&mid=2247484420&idx=1&sn=5f98ef156cd6a784f0b1e64eed11ee42&chksm=c093af8df7e4269bdda3ed4adc37ce5f30707760ad42a2e0c6c3278ff0a0c5fcaf890016f9b5&token=1012529499&lang=zh_CN#rd 文章目录 …

.NET Web配置解析WebShell (含工具视频)

01WebPages配置项 在 .NET 应用程序中,"webpages:Enabled" 是一个用于启用或禁用 Web 页面功能的配置项。当它的值为 "true" 时,表示启用了 Web 页面功能,允许在应用程序中使用 .cshtml 或 .vbhtml 文件。而当它的值为 &…

网络 | 应用层-websocket协议报文格式解析

websocket的官方文档为rfc(request for comments),是网络协议的规范文档。它包含了许多计算机世界的核心知识 除了这里的websocket,它里边还包含我们熟知的http,tcp等协议的解析。 websocket协议对应的编号是rfc 6455 websocket协议格式解析 由图可知&a…

信安标委发布16项网络安全国家标准:8项为旧标准替代,8项标准为新发布

1. 背景 根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第6号),全国网络安全标准化技术委员会归口的16项国家标准正式发布。 2. 标准清单 本次国家标准涵盖了信息技术安全评估准则、…

RTT PIN设备学习

获取GPIO编号 GET_PIN(port, pin)#define LED_BLUE_PIN GET_PIN(A, 0)设置引脚模式 void rt_pin_mode(rt_base_t pin, rt_base_t mode);设置引脚电平 void rt_pin_write(rt_base_t pin, rt_base_t value);rt_base_t pin 同上, 为引脚编号,尽量通过宏定…

网络安全(6) 模拟实验 Metasploit 控制并获取Windows 登录HASH、LM Hash和NTLM Hash密文解析

窃取WINDOWS账号密码 系统环境:主机(Windows系统 IP:192.168.126.129),虚拟机(KALI系统 IP:192.168.126.3),两者需要能通过本地网络互通互连。 攻击工具:Metasploit是一…

14:java基础-Tomcat-Web容器

文章目录 面试题Web 容器是什么?HTTP 的本质 面试题 Web 容器是什么? 让我们先来简单回顾一下 Web 技术的发展历史,可以帮助你理解 Web 容器的由来。早期的 Web 应用主要用于浏览新闻等静态页面,HTTP 服务器(比如Apa…

打开IE浏览器自动跳转微软的edge浏览器,取消自动跳转

打开IE浏览器会自动跳转微软的edge浏览器 不想跳转的解决办法 1.Win Q 输入 Internet,点击Internet 选项 2.去掉勾选 启用第三方浏览器扩展,然后就不自动跳转了 3. 完成

解决电脑睡眠后,主机ping不通VMware虚拟机

文章目录 问题解决方法方法一方法二注意 问题 原因:电脑休眠一段时间,再次打开电脑就ping不通VMware虚拟机。 解决方法 方法一 重启电脑即可,凡是遇到电脑有毛病,重启能解决90%问题。但是重启电脑比较慢,而且重启…

Android动态布局framelayout

功能说明 最近碰到一个需求,要求在网页端拖控件,动态配置app控件的模块,大小和位置,显示不同的功能,然后在app大屏展示。 技术难点: 1.动态控件位置和大小难调,会出现布局混乱,位置错…

STL——queue容器【队列】

queue的基本概念&#xff1a; 概念&#xff1a;queue是一种先进先出的数据结构&#xff0c;它有两个出口 queue的构造函数&#xff1a; 构造函数&#xff1a; queue<T>que:采用模板类实现&#xff0c;queue对象的默认构造形式 queue(const queue &que):拷贝构造函…

SpringBoot项目代码反编译、加密

话不多说&#xff0c;直接上干活 1. 引入依赖地址和依赖 在maven的setting.xml中添加 <repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository> </repositories>在需要加密的项目的pom.x…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…