4.JVM八股
JVM空间划分
线程共享和线程私有
1.7:
线程共享:
堆、方法区
线程私有:
虚拟机栈、本地方法栈、程序计数器
本地内存
1.8:
线程共享:
堆
线程私有:
老三样
本地内存,元空间
程序计数器
虚拟机栈
由一个个栈帧组成
每一个栈帧中包含了:
- 局部变量表
- 方法返回地址
每调用一次函数,就会有对应的一个栈帧入栈。
本地方法栈
同虚拟机栈,只不过存的是native方法
native本地方法,就是指非java语言实现的,而是更底层的用C实现的
堆
用来存放对象的
新生代、老年代、永久代(元空间)
字符串常量池
方法区
是一个抽象的概念
具体实现由:永久代、元空间实现
用来存放类信息的地方、以及运行时常量池
直接内存
独立于JVM之外的,只受操作系统影响的内存
垃圾回收原理
- 先执行young GC(一般使用 标记复制法)
- 然后执行full GC(标记清除、或者标记整理)
对象创建过程
- 类加载检查
- 分配内存
- CAS失败重试
- TLAB空间预留
- 初始化0值
- 设置对象头
- 初始化init
对象的内存布局
- 对象头
- 类指针
- GC年龄
- Mark word锁信息
- 实例数据
- 对其填充
对象的访问定位
两种:
句柄
直接指针
GC原理
垃圾回收的基本原理
- 优先在新生代分配,回收Minor GC
- 当老年代满了的时候,会触发full gc
- 什么情况下新生代对象加入老年代:年龄够了,大文件直接进入
对象死亡的判断方法
引用计数法,一般不用,有循环依赖问题
可达性分析法:
初次标记GC ROOT,
并发标记之后的,
最后STW重新。
GC root有哪些?
虚拟机站、本地方法栈、方法区的常量引用的对象
常量的GC规则
常量本质上是一种弱引用,
当不再有虚拟机栈的变量引用它时,下一次GC就会回收。
类信息的回收原则
也是一种弱引用,它的引用前提比较多
- 没有实例了
- 没有类加载器了
- 没有相关类的引用了
垃圾收集算法
年轻代的复制标记算法为什么是8 :1 :1?
分代的3种垃圾收集
1、Serial + SerialOld
单线程,STW
2、Parallel Scavenge + Parallel Old
多线程并行,STW
默认1.8
3、ParNew + CMS
1、CMS的特点:第一个并发的垃圾收集器
2、原理:可达性分析+ 三色标记
3、过程:3此标记,1次并发整理
4、解决漏标:使用增量更新
5、缺点:浮动垃圾+标记清除碎片太多
分区收集器
4、G1
1、第一个分区收集器,1.9开始默认、分区,可以设置最大停顿时间,
2、原理:3个回收过程
young GC、Mix GC、full GC
3、过程:3次标记+1次筛选清理(用优先队列维护需要先被清理的内容)(STW)
4、解决漏标:STAB(需要额外的RSET,记录当前的Reign被哪些别的Reign给引用过)
5、采用标记整理、标记复制
5、ZGC收集器
颜色指针+读屏障
类文件结构
类文件以.class存在在方法区(元空间)
总体构成:略
类加载过程
1、加载
- 类加载器读取字节码
- 生成class类,作为访问方法区中类文件结构的入口
2、连接
2-1、验证
主要是验证字节码,保证字节码符合JVM规范
2-2、准备
分配内存,初始化零值
2-3、解析
把符号引用转为直接引用
符号引用是指类、方法、等符号指向内存地址,是间接的。
直接引用是指,使用内存地址偏移量指向具体的内容,保证了快速访问。
3、初始化
就是执行构造方法
当实例化时才执行
注意:
按需加载、按需连接。
类加载器
介绍
1、读取解析字节码中的内容,
2、生成class对象存入方法区。
注意:
是按需加载
且加载有持久性
内置的3种类加载器
1、BootStrap ClassLoader
long包下的、Object的。。。
2、Extension ClassLoader
JDBC等
3、App ClassLoader
用户自定义的类
如何自定义类加载器
1、定义类加载器,继承ClassLoader、重写findClass或者loadClass方法,更具全类名找到字节码,然后创建class对象到方法区。
2、使用时
- new 类加载器
- 使用loadClass加载
- 使用得到的class对象,newInstance、getMethod、invoke创建实例、使用实例方法。
findClass和loadClass的区别?
- loadClass:先去父类中使用loadClass加载,如果没法加载,才会使用自己的loadClass的加载逻辑。
- findClass:不去父类中加载,直接在本层加载
loadClass遵循双亲委派机制,findClass不遵循
双亲委派机制
当一个类加载器要加载一个字节码时,首先不是自己加载,而是使用上层的类加载器加载,如果上层无法加载才使用本层加载。
- 自底向上询问
- 自顶向下加载
双亲委派模型的好处
- 保证类不会被重复加载(假设不同的类加载器加载同一个类,那么最后都会变成同一个类加载器加载类)
- 保证核心API不被篡改(核心的类,比如long下的类,最终都只会被bootstrapClassloader加载)
JVM调优
监控内存情况
1、优先可视化:
使用Jconsole
2、其次使用命令行:
Jstat、Jinfo
JVM调优参数设置
1、
分配堆内存
分配栈内存
分配元空间内存
分配新生代、老年代内存
2、
调整对象年龄阈值(什么时候适合缩短?)
默认多大对象直接进入老年区
3、设置垃圾收集器
4、G1的最大停顿时间
-Xms
-Xmx
-Xss
-XX:MetaSpace
-XX:newSize
-XX:MaxTenuringThreshold
调优思路
就是尽可能把该进入老年代的提前进入老年代,不该进入老年代的在新生代就GC掉
相关文章:
4.JVM八股
JVM空间划分 线程共享和线程私有 1.7: 线程共享: 堆、方法区 线程私有: 虚拟机栈、本地方法栈、程序计数器 本地内存 1.8: 线程共享: 堆 线程私有: 老三样 本地内存,元空间 程序计数器 …...

内网渗透系列-mimikatz的使用以及后门植入
内网渗透系列-mimikatz的使用以及后门植入 文章目录 内网渗透系列-mimikatz的使用以及后门植入前言mimikatz的使用后门植入 msf永久后门植入 (1)Meterpreter后门:Metsvc(2)Meterpreter后门:Persistence NC后…...

5G网络开通与调测ipv4
要求如下: 1. 勘站规划 1. 【重】首先观察NR频点,完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下:观察AAU的通道数,最大发射功率;选择N41的选型频段也要选41 2. …...
Spark开窗函数之ROW
Spark 1.5.x版本以后,在Spark SQL和DataFrame中引入了开窗函数,其中比较常用的开窗函数就是row_number 该函数的作用是根据表中字段进行分组,然后根据表中的字段排序;其实就是根据其排序顺序,给组中的每条记录添 加一个序号;且每组的序号都是从1开始,可利用它的这个特性进行分组…...

双向链表的实现(详解)
目录 前言初始化双向链表的结构为双向链表的节点开辟空间头插尾插打印链表尾删头删查找指定位置之后的插入删除pos节点销毁双向链表 前言 链表的分类: 带头 不带头 单向 双向 循环 不循环 一共有 (2 * 2 * 2) 种链表 带头指的是:带有哨兵位节点 哨兵位&a…...
SpringBoot项目中如何使用校验工具
用到hutool提供的校验方法与java提供的校验方法 1. 声明数据 String str "123" String regex "^123456$" Boolean is1_6 mismatch(str, regex);2. 定义校验方法 // 校验是否不符合正则格式 private static boolean mismatch(String str, String rege…...

AI预测小分子与蛋白的相关特征: MegaMolBART, MoFlow,ESM-1, ESM-2
1、小分子:MegaMolBART, MoFlow 1)MegaMolBART https://github.com/NVIDIA/MegaMolBART 基于 SMILES 的小分子药物发现与化学信息学深度学习模型。 2)MoFlow https://github.com/calvin-zcx/moflow 用flow流方式分子生成 2、蛋白质:ESM-1, ESM-2 https://github.com/fa…...

基于深度学习的花卉检测系统(含PyQt界面)
基于深度学习的花卉检测系统(含PyQt界面) 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现参考资料 前言 本项目是基于swin_transformer深度学习网络模型的花卉检测系统,…...

深度学习图像处理基础工具——opencv 实战信用卡数字识别
任务 信用卡数字识别 穿插之前学的知识点 形态学操作 模板匹配 等 总体流程与方法 1.有一个模板 2 用轮廓检测把模板中数字拿出来 外接矩形(模板和输入图像的大小要一致 )3 一系列预处理操作 问题的解决思路 1.分析准备:准备模板&#…...
【HBase】HBase高性能架构:如何保证大规模数据的高可用性
HBase高性能原理 HBase 能够提供高性能的数据处理能力,主要得益于其设计和架构的几个关键方面。这些设计特点使得 HBase 特别适合于大规模、分布式的环境中进行高效的数据读写操作。以下是 HBase 高性能的主要原因: 1. 基于列的存储 HBase 是一个列式…...
JAVA基础两个项目案例代码
1.JAVA使用ArrayList上架菜品案例 视频参考链接 创建一个Food.java类 package org.example;// 菜品类 public class Food {private String name; // 菜品名private double price; // 价格private String desc; // 菜品描述public Food() {}public Food(String name, Double …...

asp.net core 网页接入微信扫码登录
创建微信开放平台账号,然后创建网页应用 获取appid和appsecret 前端使用的vue,安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…...

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼
【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法,结果弄完没有出现小鹤双拼方案,想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg,双击运行 3. 在设置中找到微软输入法-常规 1. 新建一个…...
如何解决微信小程序无法使用css3过度属性transition
由于微信小程序不支持CSS3过度属性transition,所以我们需要利用微信小程序api进行画面过度的展示 首先是官方示例: wxml: <view animation="{{animationData}}" style="background:red;height:100rpx;width:100rpx"></view> js: Page(…...
【软件设计师知识点】九、网络与信息安全基础知识
文章目录 计算机网络的概念网络分类网络拓扑结构网络体系结构ISO/OSI 7层参考模型TCP/IP 4层模型TCP/IP 协议族应用层协议传输层协议网络层协议IP 地址IPV4 数据报IP 地址分类子网划分子网掩码IPv6地址...

广东省道路货物运输资格证照片回执可手机线上办理
广东省道路运输资格证是从事道路运输业务、危险品道路运输人员的必要证件,而在办理该证件的过程中,驾驶员照片回执是一项必不可少的材料。随着科技的发展和移动互联网的普及,现在办理驾驶员照片回执已经不再需要亲自前往照相馆,而…...

【微信小程序——案例——本地生活(列表页面)】
案例——本地生活(列表页面) 九宫格中实现导航跳转——以汽车服务为案例(之后可以全部实现页面跳转——现在先实现一个) 在app.json中添加新页面 修改之前的九宫格view改为navitage 效果图: 动态设置标题内容—…...
【设计模式】SOLID设计原则
1、什么是SOLID设计原则 SOLID 是面向对象设计中的五个基本设计原则的首字母缩写,它们是: 单一职责原则(Single Responsibility Principle,SRP): 类应该只有一个单一的职责,即一个类应该有且只…...

基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30
摘 要 随着人们生活水平的高速发展,智能停车计费信息管理方面在近年来呈直线上升,人们也了解到智能停车计费的实用性,因此智能停车计费的管理也逐年递增,智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…...

IntelliJ IDEA 2022.3.2 解决decompiled.class file bytecode version:52.0(java 8)
1 背景 使用idea 打开一个Kotlin语言编写的demo项目,该项目使用gradle构建。其gradle文件如下: plugins {id javaid org.jetbrains.kotlin.jvm version 1.8.20 } group me.administrator version 1.0-SNAPSHOTrepositories {mavenCentral()jcenter()…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...