JVM 第一部分 JVM两种解释器 类加载过程和类加载器

JVM是跨平台跨语言的虚拟机,不直接接触硬件,位于操作系统的上一层

跟字节码文件直接关联,和语言没有关系

一次编译成字节码文件,多次执行

请添加图片描述

虚拟机可以分成三部分:类加载器,运行时数据区,执行引擎(解释器+JIT编译器)

JIT编译器是把一些常用代码编译成 机器指令,并缓存起来,加快执行速度【解释器相当于步行,响应快但是速度慢。JIT要先编译成机器指令,相当于公交车,要等一段时间,但是速度块。只用解释器很慢,只用JIT要等比较久】

请添加图片描述

零地址指令是因为栈里面每次只会有一个元素在栈顶,一次只处理一个

栈式架构指令集小,但是完成一个操作用的指令数量多

反编译:运行写的程序之后,会输出编译后的文件夹,cmd,cd进到某class文件的文件夹,javap -v class文件名 > xxx.txt 【就可以把字节码文件的信息放到txt文件看】

一个Java程序对应一个java虚拟机(应该是)(服务器部署多个服务,应该有多个虚拟机)所以不同程序的堆栈不共享

第一部分:类加载器

请添加图片描述

  • 加载:获取类的全类名,读取class文件,在方法区创建对应的Class对象
  • 链接
    • 验证:验证字节码文件是否合法之类
    • 准备**:把类变量(加了static的变量)创建处理,赋零值**
      • 【加了final的常量在编译时就已经分配内存,在准备阶段显式初始化】
      • 【不会为实例变量分配初始化,实例变量,就是成员变量,是在对象创建时,分配到堆时,默认赋零值】
    • 解析:把常量池内的符号引用换成直接引用【事实上,解析操作往往在JVM初始化之后执行】
  • 初始化:执行类构造器方法的过程。就是如果有类变量或者静态方法块,虚拟机会自动把他们整合在一起,按顺序创建变量和赋值,由字节码中的方法执行,这个方法称为类构造器方法
    • 子类如果有类变量或者静态方法块,会先执行父类的方法,然后执行子类的
    • 多线程下,会给方法加锁
    • 是类构造器,每个类的字节码文件都有

请添加图片描述

  • 通过 某个类.class.getClassLoader() 可以得到它的类加载器
  • 获取的类加载器对象.getParent() 可以获得它包含的类加载器
  • 引导类加载器
    • 用C/C++写,不能获取到
    • 加载Java的核心类库(String类就是用它加载)
  • 扩展类加载器
    • 用Java写
    • 加载ext文件夹下的类库
  • 系统类加载器
    • 用Java写
    • 默认的类加载器,加载环境变量或系统属性

请添加图片描述

  • 好处:
    • 避免用户创建自己的类替换Java的一些核心类,比如String
      • 【如果包名和核心api包名一样,即使是新的类,也不允许创建】
      • 【实践中,如果新建一个String类,这个类的包也是 java.long 里面有个main方法。但是启动不了会报错】
      • 因为它经过双亲委派机制,到达引导类加载器,但是引导类加载器加载的是api里面的String,加载不了这个类,所以就启动不了main方法
    • 避免类的重复加载:向上委托,一旦父加载器加载了,子加载器就不会重复加载
    • 不同的类加载器加载的类 就算包名一样且同名也是不同的类(也是说要是从同一个class文件加载,不同类加载器,类也不同)

请添加图片描述

常用调优工具

  • JDK命令行
  • Eclipse: Memory Analyzer Tool
  • Jconsole
  • VisualVM
  • Jprofiler
  • Java Flight Recorder
  • GCViewer
  • GC Easy

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

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

相关文章

TDengine 在 DISTRIBUTECH 分享输配电数据管理实践

2 月 27-29 日,2024 美国国际输配电电网及公共事业展(DISTRIBUTECH International 2024)在美国-佛罗里达州-奥兰多国家会展中心举办。作为全球领先的年度输配电行业盛会,也是美洲地区首屈一指的专业展览会,该展会的举办…

【和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告

【🐋和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告 文章目录 【🐋和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告1 业务背景2 数据说明3 数据探索性分析4 用户行为分析4.1 用户属性与行为关系分析4.2 转化行为在不同用户属性群体中的分布…

值类型和引用类型详解(C#)

可能你对值类型和引用类型还不太了解。 值类型和引用类型,是c#比较基础,也必须掌握的知识点,但是也不是那么轻易就能掌握,今天跟着我一起来看看吧。 典型类型 首先我们看看这两种不同的类型有哪些比较典型的代表。 典型值类型…

在Windows 10系统中启用快速启动功能

在Windows 10系统中启用快速启动功能,可以按照以下步骤进行: 方法一(通过设置应用): 点击任务栏左下角的“开始”按钮或者按键盘上的Win键打开“开始”菜单。在“开始”菜单中选择“设置”图标(齿轮形状&…

3.3日学习打卡----初学Redis(一)

3.3日学习打卡 目录: 3.3日学习打卡NoSQL为什么要用NoSQL什么是NoSQL?NoSQL的四大分类关系型数据库和非关系型数据及其区别NoSQL经典应用 RedisRedis是什么?Linux下安装RedisDocker下安装Redis基本知识 NoSQL 为什么要用NoSQL 单机Mysql的美好年代 在90年代&…

Sqlmap进行http头注入及流量分析

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 利用 SQLMap 进行 HTTP 头注入的方式对于 Less-19 注入点的注入 SQLMap 工具我使用kali中自带的 注入准备 先使用bp将Less-19靶场的包抓下来保存到 txt 文件中,输入账号 admin…

Ubuntu23.10禁用Wayland

禁用前 编辑custom.conf文件 sudo vim /etc/gdm3/custom.conf 去掉WaylandEnablefalse前的#号 保存退出 重启系统 生效: 成功转换为X11

【LeetCode题解】2809. 使数组和小于等于 x 的最少时间+2788. 按分隔符拆分字符串+410. 分割数组的最大值

文章目录 [2809. 使数组和小于等于 x 的最少时间](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路: [2788. 按分隔符拆分字符串](https://leetcode.cn/problems/split-strings-by-separator/)思路: [410. 分割数组的最大…

Leetcoder Day36| 动态规划part03

343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: 10输出: 36解释: 10 3 3 4, 3 3 4 36。说明: 你可以假设 …

如何提取图片中某个位置颜色的RGB值,RGB十进制值与十六进制的转换

打开本地的画图工具,把图片复制或截图粘进去,用颜色提取器点对应的位置就可以提取了。 获取到的 RGB 值为 (66,133,244) 转化后的值为 #4285F4。 【内容拓展一】:RGB 十进制值与十六进制的转换 当我们从 RGB 十进制值转换为十六进制值时&a…

Yapi部署

【GO开发工程师】Yapi部署 推荐个人主页:席万里的个人空间 文章目录 【GO开发工程师】Yapi部署1、Yapi部署 1、Yapi部署 初始化yapi: git clone https://github.com/Ryan-Miao/docker-yapi.git cd docker-yapi docker-compose upyapi启动失败 1.cd进入…

粉丝福利-纯净Windows系统安装镜像下载网站

​Windows操作系统镜像文件是从微软或其他经过验证的来源下载正版操作系统安装介质的关键所在。以下是详细阐述从不同渠道获取Windows系统镜像的说明,尤其强调官方和安全的下载途径。Windows系统镜像可以从多个可靠来源下载,以下是几个推荐的选择: 微软官方网站 微软官方网…

对于《幻兽帕鲁》这样的游戏,如何优化服务器性能以提高游戏体验?

对于《幻兽帕鲁》这样的游戏,如何评估和优化服务器性能以提高游戏体验? 硬件配置优化:选择高性能的服务器,如4核16G的幻兽帕鲁服务器,这样可以保证有足够的计算性能和内存容量来支持游戏的运行。同时,考虑到…

Node.js(六)-数据库与身份认证

一 、学习目标 ◆ 能够知道如何配置MySQL数据库环境 ◆ 能够认识并使用常见的 SQL语操作数据库 ◆ 能够在Express中操作MySQL数据库 ◆ 能够了解 Session的实现原理 ◆ 能够了解JWT的实现原理 二、数据库的基本概念 1.1 什么是数据库 数据库(database)…

边缘计算网关的重要作用-天拓四方

随着物联网技术的迅猛发展,数据量的爆炸式增长对数据处理和分析提出了更高的要求。边缘计算网关作为连接物理世界和数字世界的桥梁,正逐渐受到各行业的重视。本文将从行业背景、功能特点以及带来的效益等方面,探讨边缘计算网关在当前及未来的…

备战蓝桥杯---状态压缩DP基础2之TSP问题

先来一个题衔接一下: 与上一题的思路差不多,不过这里有几点需要注意: 1.因为某一列的状态还与上上一行有关,因此我们令f[i][j][k]表示第i行状态为j,第i-1行状态为k的最大炮兵数。 因此,我们可以得到状态转移方程&…

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 问题描述解决方案 问题描述 用git的时候可能会遇到这个问题: (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果: 原来的是 http,配置好后 https 也能用了,并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的,还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

【leetcode】圆圈中最后剩下的数字

目录 1. 问题 2. 思路 3. 代码 4. 运行 1. 问题 本题即为典型的约瑟夫问题,通过递推公式倒推出问题的解。原始问题是从n个人中每隔m个数踢出一个人,原始问题变成从n-1个人中每隔m个数踢出一个人…… 示例 1: 输入: n 5, m 3 输出: 3…

Unity TMP文字移动效果

前言 看见很多游戏有很特殊的波浪形文字效果&#xff0c;于是来尝试一下控制TMP文字顶点的方式达到类似效果。 原理 挂载tmp text&#xff0c;在里面随便放入非空格字符。 tmp text组件开放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…