【JVM基础篇】JVM入门介绍

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一套搞定(丰富的实战案例及最热面试题),也有部分内容来自于自己的思考,发布文章是想帮助其他学习的人更方便地整理自己的笔记或者直接通过文章学习相关知识,如有侵权请联系删除,最后对 黑马程序员 的优质课程表示感谢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue路由开启步骤

1.在控制台输入命令 //控制台下载安装npm add vue-router3.6.5 2.在main.js下导入并注册组件 import Vue from vue import App from ./App.vue//控制台下载安装npm add vue-router3.6.5 //导入 import VueRouter from "vue-router";//注册 Vue.use(VueRouter) con…

鸿蒙HarmonyOS开发:List列表组件的使用详解及案例演示(二)

文章目录 一、List组件简介1、List组件2、ListItem组件3、ListItemGroup组件 二、使用ForEach渲染列表三、设置列表分割线四、设置List排列方向五、索引值计算规则六、示例演示1、AlphabetIndexer组件2、代码3、效果 一、List组件简介 在我们常用的手机应用中,经常…

uni-app(三):离线打包与插件引用(Android)

离线打包与插件引用 1.下载Android离线SDK2.使用Android Studio打开离线打包项目并更新Gradle3.解决报错4.构建5.配置AppKeya.查看证书b.申请AppKeyc.配置AppKey 6.生成本地打包App资源7.拷贝App资源到Android项目中8.修改 appid9.修改Android项目配置文件10.下载证书并配置11.…

5.9网络协议

由网卡发送数据通过网线进行发送,当网卡接收到信号以后将数据传给内核数据区,然后由操作系统交给相应的进程。 将数据进行发送的时候需要借助于网线实现,这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大&#xff0…

C脚本实现WIncc模拟量趋势窗口弹出

文章目录 前言一、步骤及解析二、运行画面演示三、总结 前言 本文给出了一种基于C脚本实现点击输入输出域对象,弹出对应模拟量趋势窗口的方法。 一、步骤及解析 在Wincc变量管理中,添加两个变量; 示例如下: 将以上两个变量添加到…

小众行业风口:Q1季度擦窗机器人行业线上市场销售数据分析

今天给大家分享一个2024年的小众行业增长风口——擦窗机器人。 作为家居自动化里的重要一员,擦窗机器人可以简称为擦窗神器,是为了解决大户型家庭的外窗清洁痛点而存在。而目前,擦窗机器人行业正在走向成熟,且市场需求量居高不下…

抖店选品都怎么选品?什么样的产品更吸引人,更具有购买力?

大家好,我是电商花花。 抖店选品一直都是我们无货源商家的核心问题,不管是出单、还是爆单,店铺想要有销量的前提下都是选品。 很多人一上来就是就是选品,没有选品经验还瞎选品,结果到最后选了一堆出单的产品&#xf…

[蓝桥杯]真题讲解:AB路线(BFS+分层图)

[蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #define INF …

BGP(border gateway protocol)边界网关协议初识篇

BGP它是一种路径矢量协议&#xff0c;用于决定数据包在互联网中的最佳路径。 1、工作原理&#xff1a; 自治系统&#xff08;AS&#xff09;间路由: BGP主要用于连接不同自治系统之间的路由器&#xff0c;其中每个自治系统&#xff08;AS&#xff09;代表一组具有共同路由的网…

Python爬虫 【1】 —— 爬虫基础

爬虫基本套路 基本流程 目标数据来源地址结构分析 具体数据在哪&#xff08;网站 还是APP&#xff09;如何展示的数据、 实现构思操刀编码 基本手段 破解请求限制 请求头设置&#xff0c;如&#xff1a;useragent为有效客户端控制请求频率&#xff08;根据实际情境&#xff09…

Metes and Bounds Pro for Mac 激活版:精准数据转换与绘图利器

Metes and Bounds Pro for Mac是一款专为土地测量和边界划定而设计的专业软件&#xff0c;为Mac用户提供了高效、精确的测量工具。其核心功能在于其全面的测量工具和简便的操作流程&#xff0c;能够满足在土地管理、房地产开发、农业规划等领域的多样化需求。 这款软件集合了距…

C++学习第二十八课:C++ 中的智能指针详解

在 C 中&#xff0c;内存管理是每个程序员都需要面对的问题。在处理动态分配的内存时&#xff0c;如果忘记释放内存&#xff0c;可能会导致内存泄漏。为了解决这个问题&#xff0c;C11 引入了智能指针的概念。本文将详细介绍 C 中使用智能指针的方法&#xff0c;并结合实际案例…

天龙怀旧游戏python脚本

设置图&#xff1a; 游戏窗口最大化。 海贼洞这里定位你要回点的定位。 运行bat就行&#xff0c;脚本出错了还是会重新运行脚本&#xff0c;运行自动启动&#xff0c;end暂停脚本&#xff0c;home重新启动脚本 1. 我常用的是内挂回点脚本&#xff0c; 下面都是前台脚本&…

(三)Appdesigner-界面转换及数据导入和保存

提示&#xff1a;文章为系列文章&#xff0c;可以在对应学习专栏里面进行学习。对应资源已上传 目录 前言 一、Appdesigner是什么&#xff1f; 二、界面切换 三、数据导入及保存 &#xff08;一&#xff09;数据导入 &#xff08;二&#xff09;数据保存 总结 前言 Appd…

windows设置Redis服务后台自启动

1.通过CMD命令行工是进入Redis安装目录&#xff0c;将Redis服务注册到 Windows服务中 redis-server.exe --service-install redis.windows.conf --loglevel verbose 2.查看—下Redis服务是否注册 WinR输入services.msc&#xff0c;确定进入&#xff0c;再查找是否有Redis 3.启动…

自动化测试基础 --- Jmeter

前置环境安装 首先我们需要知道如何下载Jmeter 这里贴上下载网站Apache JMeter - Download Apache JMeter 我们直接解压,然后在bin目录下找到jemter.bat即可启动使用 成功打开之后就是这个界面 每次打开可以用这种方式切换成简体中文 或者直接修改properties文件修改对应的语言…

C 语言中怎么产生真正的随机数?

在C语言中&#xff0c;要产生真正的随机数&#xff0c;我们通常使用标准库中的 <stdlib.h> 头文件中提供的随机数生成函数。 这些函数可以生成伪随机数&#xff0c;但它们在一定程度上是随机的&#xff0c;足以满足大多数应用程序的需求。 1. 伪随机数生成函数 C标准库…

《C语言文件处理:从新手到高手的跃迁》

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

【计算机毕设】基于SpringBoot的在线拍卖系统 - 免费源码(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于Spring Boot的在线拍卖系统&#xff0c;为用户提供便捷的拍卖服务&#xff0c;实现商品的竞拍和交易功能&#xff0c…

前端 | 数据统计及页面数据展现

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 折线图分别展现当前累计单词总数及每篇新增单词数&#xff0c;鼠标悬浮读取具体数值。 数值统计 词云图展现&#xff0c;及点击查看…