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

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

相关文章:

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

JVM是跨平台跨语言的虚拟机,不直接接触硬件,位于操作系统的上一层 跟字节码文件直接关联,和语言没有关系 一次编译成字节码文件,多次执行 虚拟机可以分成三部分:类加载器,运行时数据区,执行引…...

用Java语言创建的Spring Boot项目中,如何传递数组呢??

问题: 用Java语言创建的Spring Boot项目中,如何传递数组呢?? 在这个思路中,其实,Java作为一个后端开发的语言,没必要着重于如何传入,我们主要做的便是对传入的数组数据进行处理即可…...

[笔记] 使用 Java Swing 实现一个简单的窗口

Java Swing 是一个用于构建图形用户界面(GUI)的Java库,它提供了丰富的组件和工具,用于创建交互式的桌面应用程序。Swing 是 Java Foundation Classes(JFC)的一部分,它是 Java 平台的一种标准用户…...

2024.03.03蓝桥云课笔记——排序

sort简介 #include<algorithm> 使用的是快速排序 时间复杂度为O(nlogn) sort使用(默认是从小到大) 1.sort(起始地址&#xff0c;结束地址的下一位&#xff0c;*比较函数&#xff09;&#xff1b; #include<iostream> #include<algorithm> using namesp…...

Vue3和ElementPlus封装table组件

最近学习vue3.2并自己在写一个项目&#xff0c;然后发现好几个页面都是列表页&#xff0c;重复写table和column也是觉得累&#xff0c;学习的项目列表页不算多&#xff0c;要是公司项目就不一样了&#xff0c;所以就想着自己封装一个table组件&#xff0c;免去大量重复工作和co…...

第一篇:参考资料地址

javaGuide JavaGuide&#xff08;Java学习&面试指南&#xff09; | JavaGuide 清华学生总结的 小林coding labuladong labuladong 的算法笔记 | labuladong 的算法笔记 【华仔说技术】kafka的系列文章 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg3MTcxMDgxNA…...

wordpress 开源主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择&#xff0c;此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题&#xff0c;适合做劳动保护的外贸公司使用。 ht…...

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊?

于月仙主动与赵本山握手表示欢迎&#xff0c;赵&#xff1a;怎么着要跟我第二次牵手啊&#xff1f; --小品《乡村爱情》&#xff08;中1&#xff09;的台词 表演者&#xff1a;赵本山 于月仙 王小利 唐鉴军等 &#xff08;接上&#xff09; 咱们呢就给新人揭盖头 好 好长贵…...

Unity UGUI之Slider基本了解

在Unity中&#xff0c;Slider&#xff08;滑动条&#xff09;是一种常用的用户界面控件之一&#xff0c;允许用户通过拖动滑块来选择一个数值。常常应用于调节数值&#xff08;如调节音量、亮度、游戏难度等&#xff09;、设置选项等。 以下是Slider的基本信息和用法: 1、创建…...

【Linux】进程间通信之共享内存

文章目录 引入共享内存的原理共享内存的相关接口shmget()shmat()shmdt()shmctl() 共享内存的简单使用共享内存的特点 引入 进程间通信&#xff0c;顾名思义就是一个进程和另一个进程之间进行对话&#xff0c;以此完成数据传输、资源共享、通知事件或进程控制等。 众所周知&am…...

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于条件风险价值的虚拟电厂参与能量及备用市场的双层随机优化》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 这篇文章的标题涉及到以下几个关键点…...

前端架构: 脚手架通用框架封装之CommonJS和ESM混合开发兼容解决(教程五)

CommonJS 和 ESModule 混合开发 接上文&#xff0c;仍旧在 abc-cli 项目中参考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136433159现在要在脚手架项目中安装 chalk 依赖&#xff0c;因为在 abc-cli 项目几乎都是 CommonJS的实现而 chalk 这个依赖源码是基…...

基于主从模式的Reactor的仿muduo网络库

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…...

Linux服务器搭建超简易跳板机连接阿里云服务器

简介 想要规范内部连接阿里云云服务器的方式&#xff0c;但是最近懒病犯了&#xff0c;先搞一个简易式的跳板机过渡一下&#xff0c;顺便在出一个教程&#xff0c;其他以后再说&#xff01; 配置方法 创建密钥 登录阿里云&#xff0c;找到云服务器ECS控制台&#xff0c;点击…...

Windows Server 各版本搭建文件服务器实现共享文件(03~19)

一、Windows Server 2003 打开服务器&#xff0c;点击左下角开始➡管理工具➡管理您的服务器➡添加或删除角色 点击下一步等待测试 勾选自定义配置&#xff0c;点击下一步 选择文件服务器&#xff0c;点击下一步 勾选设置默认磁盘空间&#xff0c;数据自己更改&#xff0c;最…...

ARM总结and复习

安装交叉编译工具链 a. 为什么安装 因为arm公司的指令集在不断迭代升级&#xff0c;指令集日益增多,而架构是基于指令集研发的&#xff0c;所以架构不一样&#xff0c;指令集也不一样 eg:arm架构使用的是arm指令集 x86架构使用的是x86指令集 而我们日常开发环境中linux的架构…...

非功能测试的定义、类型和示例

软件已从推动者转变为不同行业企业成功的核心支柱。因此&#xff0c;非功能测试活动成为人们关注的焦点。然而&#xff0c;许多技术和质量保证专业人员并没有意识到非功能测试的必要性。 他们必须了解什么是非功能测试以及为什么必须鼓励将其作为企业应用程序开发项目的实践。…...

Angular基础---HelloWorld---Day1

文章目录 1. 创建Angular 项目2.对Angular架构的最基本了解3.创建并引用新的组件&#xff08;component&#xff09;4.对Angular架构新的认识&#xff08;多组件&#xff09;5.组件中业务逻辑文件的编辑&#xff08;ts文件&#xff09;6.标签中属性的绑定(1) ID的绑定(2) class…...

k8s部署项目常见的问题及解决方案

在Kubernetes&#xff08;k8s&#xff09;部署项目中&#xff0c;确实存在一些常见问题和挑战。以下是这些问题及其相应的解决方案&#xff1a; 网络插件问题&#xff1a; 问题&#xff1a;网络插件配置不当或版本不兼容可能导致Pod间通信问题。解决方案&#xff1a;重新部署或…...

8051开发中禁用自动代码分区的实践指南

1. 禁用自动代码分区的技术背景在8051架构的嵌入式开发中&#xff0c;代码分区&#xff08;Bank Switching&#xff09;是一种扩展程序存储器空间的常用技术。传统8051芯片的寻址空间有限&#xff0c;通过分区切换机制可以将代码分布到不同的物理存储区域。Keil C51开发工具链默…...

VR交互框架VRF:输入抽象、物理建模与多端同步工程实践

1. 这不是又一个“VR按钮点击Demo”&#xff0c;而是一套能直接进产线的交互骨架我第一次在客户现场看到用Unity裸写VR交互逻辑的项目&#xff0c;是在2021年冬天。那是个工业培训场景&#xff0c;需要让学员用手柄抓取虚拟阀门、旋转、再插入对应接口——听起来简单&#xff0…...

信息安全工程师-移动应用安全核心知识体系与备考指南

一、引言&#xff08;一&#xff09;核心概念定义移动应用安全是指覆盖移动终端、通信网络、应用服务端全链路的安全防护体系&#xff0c;旨在保障移动应用的数据保密性、完整性、可用性&#xff0c;防范各类恶意攻击和合规风险。该知识点属于软考信息安全工程师考试大纲中 &qu…...

全球仅17家机构掌握的PlayAI教育大模型微调技术(含3所双一流高校内部调参手册节选)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PlayAI教育大模型微调技术的全球稀缺性与战略价值 在全球人工智能教育应用加速落地的背景下&#xff0c;PlayAI教育大模型微调技术已成为少数国家与头部机构掌握的核心能力。其稀缺性不仅源于算力、数据…...

别再只跑模型了!用FAD、NDB、JSD给你的AI生成声音打个分(Python实战避坑)

用FAD、NDB、JSD给你的AI生成声音打个分&#xff08;Python实战避坑指南&#xff09;当你在深夜终于调试完最后一个神经网络层&#xff0c;按下生成按钮听到第一段AI合成的声音时&#xff0c;那种成就感无与伦比。但很快&#xff0c;一个更棘手的问题出现了&#xff1a;这段声音…...

Unity ECS帧同步实战:确定性模拟与Job化网络Tick

1. 这不是“又一个Unity网络教程”&#xff0c;而是帧同步在ECS架构下的真实落地切口很多人一看到“Unity多人对战”就下意识点开&#xff0c;结果发现是PhotonMonoBehaviour的旧路子&#xff1a;对象池、RPC调用、状态同步、插值补偿……代码越写越厚&#xff0c;逻辑越埋越深…...

技术人的持续学习:保持竞争力的完整指南

技术人的持续学习&#xff1a;保持竞争力的完整指南 引言 在快速发展的技术领域&#xff0c;持续学习是保持竞争力的关键。技术更新的速度越来越快&#xff0c;新的编程语言、框架和工具不断涌现。作为一名技术人&#xff0c;只有不断学习&#xff0c;才能跟上技术发展的步伐&a…...

Playwright 浏览器自动化完全指南:从入门到实战

目录 一、什么是 Playwright二、Playwright vs Selenium&#xff1a;为什么选择 Playwright三、支持的语言与浏览器四、核心架构与执行流程五、环境安装与验证六、第一个程序&#xff1a;打开网页并截图七、常用操作速查八、元素定位详解九、自动等待机制深度解析十、浏览器上…...

还不会通义千问向量嵌入?LangChain + DashScopeEmbeddings 全实战:原理、调用、相似度计算、RAG 落地一站式精通

文章标签&#xff1a;#LangChain #DashScope #通义千问 #Embedding #向量检索 #RAG &#x1f4dd; 本章学习目标 本章聚焦阿里云通义千问 DashScopeEmbeddings LangChain 向量嵌入实战&#xff0c;帮助读者从零到一掌握&#xff1a;DashScope 向量模型原理、LangChain 集成方…...

LeetCode 1314:矩阵区域和 | 二维前缀和

LeetCode 1314&#xff1a;矩阵区域和 | 二维前缀和 引言 矩阵区域和&#xff08;Matrix Block Sum&#xff09;是 LeetCode 第 1314 题&#xff0c;难度为 Medium。题目要求计算矩阵中以每个元素为中心、KK 子矩阵区域的元素和。这道题是二维前缀和的经典应用&#xff0c;展…...