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文件加载,不同类加载器,类也不同)
- 避免用户创建自己的类替换Java的一些核心类,比如String

常用调优工具
- 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(起始地址,结束地址的下一位,*比较函数); #include<iostream> #include<algorithm> using namesp…...
Vue3和ElementPlus封装table组件
最近学习vue3.2并自己在写一个项目,然后发现好几个页面都是列表页,重复写table和column也是觉得累,学习的项目列表页不算多,要是公司项目就不一样了,所以就想着自己封装一个table组件,免去大量重复工作和co…...
第一篇:参考资料地址
javaGuide JavaGuide(Java学习&面试指南) | JavaGuide 清华学生总结的 小林coding labuladong labuladong 的算法笔记 | labuladong 的算法笔记 【华仔说技术】kafka的系列文章 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg3MTcxMDgxNA…...
wordpress 开源主题
海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择,此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题,适合做劳动保护的外贸公司使用。 ht…...
【Linux网络命令系列】ping curl telnet三剑客
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊?
于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊? --小品《乡村爱情》(中1)的台词 表演者:赵本山 于月仙 王小利 唐鉴军等 (接上) 咱们呢就给新人揭盖头 好 好长贵…...
Unity UGUI之Slider基本了解
在Unity中,Slider(滑动条)是一种常用的用户界面控件之一,允许用户通过拖动滑块来选择一个数值。常常应用于调节数值(如调节音量、亮度、游戏难度等)、设置选项等。 以下是Slider的基本信息和用法: 1、创建…...
【Linux】进程间通信之共享内存
文章目录 引入共享内存的原理共享内存的相关接口shmget()shmat()shmdt()shmctl() 共享内存的简单使用共享内存的特点 引入 进程间通信,顾名思义就是一个进程和另一个进程之间进行对话,以此完成数据传输、资源共享、通知事件或进程控制等。 众所周知&am…...
文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于条件风险价值的虚拟电厂参与能量及备用市场的双层随机优化》
本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 这篇文章的标题涉及到以下几个关键点…...
前端架构: 脚手架通用框架封装之CommonJS和ESM混合开发兼容解决(教程五)
CommonJS 和 ESModule 混合开发 接上文,仍旧在 abc-cli 项目中参考:https://blog.csdn.net/Tyro_java/article/details/136433159现在要在脚手架项目中安装 chalk 依赖,因为在 abc-cli 项目几乎都是 CommonJS的实现而 chalk 这个依赖源码是基…...
基于主从模式的Reactor的仿muduo网络库
🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…...
Linux服务器搭建超简易跳板机连接阿里云服务器
简介 想要规范内部连接阿里云云服务器的方式,但是最近懒病犯了,先搞一个简易式的跳板机过渡一下,顺便在出一个教程,其他以后再说! 配置方法 创建密钥 登录阿里云,找到云服务器ECS控制台,点击…...
Windows Server 各版本搭建文件服务器实现共享文件(03~19)
一、Windows Server 2003 打开服务器,点击左下角开始➡管理工具➡管理您的服务器➡添加或删除角色 点击下一步等待测试 勾选自定义配置,点击下一步 选择文件服务器,点击下一步 勾选设置默认磁盘空间,数据自己更改,最…...
ARM总结and复习
安装交叉编译工具链 a. 为什么安装 因为arm公司的指令集在不断迭代升级,指令集日益增多,而架构是基于指令集研发的,所以架构不一样,指令集也不一样 eg:arm架构使用的是arm指令集 x86架构使用的是x86指令集 而我们日常开发环境中linux的架构…...
非功能测试的定义、类型和示例
软件已从推动者转变为不同行业企业成功的核心支柱。因此,非功能测试活动成为人们关注的焦点。然而,许多技术和质量保证专业人员并没有意识到非功能测试的必要性。 他们必须了解什么是非功能测试以及为什么必须鼓励将其作为企业应用程序开发项目的实践。…...
Angular基础---HelloWorld---Day1
文章目录 1. 创建Angular 项目2.对Angular架构的最基本了解3.创建并引用新的组件(component)4.对Angular架构新的认识(多组件)5.组件中业务逻辑文件的编辑(ts文件)6.标签中属性的绑定(1) ID的绑定(2) class…...
k8s部署项目常见的问题及解决方案
在Kubernetes(k8s)部署项目中,确实存在一些常见问题和挑战。以下是这些问题及其相应的解决方案: 网络插件问题: 问题:网络插件配置不当或版本不兼容可能导致Pod间通信问题。解决方案:重新部署或…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
